数组和标量之间的运算
数组很重要,因为他使你不用编写循环就可以对数据执行批量的运算,这通常叫做矢量化。
(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] = 017 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]])