初学Numpy(二)

数组和标量之间的运算

数组很重要,因为他使你不用编写循环就可以对数据执行批量的运算,这通常叫做矢量化。

(1)大小相等的数组之间的任何算术运算都会将运算应用到元素级;

(2)带下不等的数组之间的运算叫做广播。

 1 import numpy as np
 2 from pprint import pprint
 3 arr1 = np.array([[x+1,x+2,x+3]for x in range(2)])
 4 print "arr1:",
 5 pprint(arr1)
 6 
 7 print("arr1*arr1:")
 8 pprint(arr1*arr1)
 9 
10 print("arr1-arr1:")
11 pprint(arr1-arr1)
12 
13 print("1/arr1:")
14 pprint(1/arr1)
15 
16 print("arr1**0.5:")
17 pprint(arr1**0.5)

运行结果:

arr1:array([[1, 2, 3],
       [2, 3, 4]])
arr1*arr1:
array([[ 1,  4,  9],
       [ 4,  9, 16]])
arr1-arr1:
array([[0, 0, 0],
       [0, 0, 0]])
1/arr1:
array([[1, 0, 0],
       [0, 0, 0]])
arr1**0.5:
array([[ 1.        ,  1.41421356,  1.73205081],
       [ 1.41421356,  1.73205081,  2.        ]])

基本的索引和切片

由于Numpy的设计目的是处理大数据,所以Numpy的对数组的修改都会直接反映到源数组上,如赋值操作。

 1 #二维数组
 2 '''
 3 在一个二维数组中,各索引位置上的元素不再是标量而是一维数组
 4 '''
 5 arr_2d = np.array([[x,x+1,x+2]for x in range(3)])
 6 pprint(arr_2d)
 7 
 8 #一次传入多个切片
 9 pprint(arr_2d[:2,1:])
10 pprint(arr_2d[:,:1])#只有冒号表示选取整个轴
11 
12 #通过将整数和切片混合,可以得到低维度的切片
13 pprint(arr_2d[2][1:])
14 
15 #切片赋值操作,会扩散到整个选区
16 arr_2d[:,:1] = 0
17 pprint(arr_2d)

运行结果:

 1 array([[0, 1, 2],
 2        [1, 2, 3],
 3        [2, 3, 4]])
 4 array([[1, 2],
 5        [2, 3]])
 6 array([[0],
 7        [1],
 8        [2]])
 9 array([3, 4])
10 array([[0, 1, 2],
11        [0, 2, 3],
12        [0, 3, 4]])
原文地址:https://www.cnblogs.com/zenzen/p/4861069.html