python numpy数组基本操作
list转numpy数组
>>>a = [1,2,3,4] >>>a = numpy.array(a) >>>a
array([1,2,3,4]) >>>a.dtype dtype('int32')
默认类型为int32
>>>a = a.astype('float32')
or
>>>a = numpy.array(a, dtype=numpy.float32)
设置类型为float32
numpy数组函数
>>> np.arange(9)
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>>np.arange(0,8,2) #从0开始,间隔为2 array([0, 2, 4, 6])
>>>np.ones((2,2,3), dtype=np.int16) #2页,2行,3列,元素全为1,指定数据类型 array([[[1, 1, 1], [1, 1, 1]], [[1, 1, 1], [1, 1, 1]]], dtype=int16) >>>np.zeros((2,2,3)) #2页,2行,3列,元素全为0 >>>np.empty((3,2)) #值取决于内存 array([[1.11821712e-19, 4.36803560e-22], [4.36803561e-22, 1.11821711e-19], [4.36803560e-22, 1.11821712e-19]]) >>>np.linspace(0,5,10) #0到5取10个数 array([0. , 0.55555556, 1.11111111, 1.66666667, 2.22222222, 2.77777778, 3.33333333, 3.88888889, 4.44444444, 5. ]) >>>np.random.randint(0,5,(2,3)) #取0到5内的数,组成2行3列的随机数组 array([[1, 2, 3], [4, 0, 2]])
数据类型转换
>>> float(1) 1.0 >>> int(2.0) 2 >>> bool(3) True >>> bool(-1) True >>> bool(0) False >>> float(True) 1.0 >>> float(False) 0.0
数组元素级别运算
>>> a = np.array([1,2,3,4]) >>> b = np.arange(4) >>> a array([1, 2, 3, 4]) >>> b array([0, 1, 2, 3]) >>> a-b array([1, 1, 1, 1]) >>> a+b array([1, 3, 5, 7]) >>> a*b array([ 0, 2, 6, 12]) >>> a**2 array([ 1, 4, 9, 16], dtype=int32) >>> a>2 array([False, False, True, True]) >>> np.exp(a) #指数 array([ 2.71828183, 7.3890561 , 20.08553692, 54.59815003])
数组矩阵运算
>>> a = np.array([[1,2],[3,4]]) >>> b = np.arange(6).reshape((2,3)) >>> a array([[1, 2], [3, 4]]) >>> b array([[0, 1, 2], [3, 4, 5]]) >>> a.dot(b) array([[ 6, 9, 12], [12, 19, 26]])
数组调用方法
参数axis用于指定运算轴,默认全部,axis=0,按列计算,axis=1,按行计算。
>>> a=np.random.randint(0,5,(2,3)) >>> a array([[2, 0, 2], [0, 2, 4]]) >>> a.sum() 10 >>> a.sum(axis=1) array([4, 6]) >>> a.sum(0) array([2, 2, 6]) >>> a.min() 0 >>> a.max(axis=1) array([2, 4]) >>> a.mean(axis=0) array([1., 1., 3.]) >>> a.cumsum(1) #按行计算累计和 array([[2, 2, 4], [0, 2, 6]], dtype=int32) >>> a.cumsum(0) #按列计算累计和 array([[2, 0, 2], [2, 2, 6]], dtype=int32)
数组索引/切片取值
一维数组
>>> a=np.arange(0,10,1)*2 >>> a array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]) >>> a[2] #从0开始 4 >>> a[-2] #-1表示最后一个索引 16 >>> a[2:5] #包括起点,不包括终点 array([4, 6, 8]) >>> a[-5:-1] array([10, 12, 14, 16]) >>> a[-1] = 100 #赋值 >>> a >>> a[1:4] = -100 #批量赋值 >>> a array([ 0, -100, -100, -100, 8, 10, 12, 14, 16, 100]) >>> a[:6:2] = -100 #从开始到第6个索引,步长为2的赋值 >>> a array([-100, -100, -100, -100, -100, 10, 12, 14, 16, 100]) >>> a[::-1] #a逆序输出,a本身没有发生变化 array([ 100, 16, 14, 12, 10, -100, -100, -100, -100, -100]) >>> a array([-100, -100, -100, -100, -100, 10, 12, 14, 16, 100]) >>> b = [np.abs(i) for i in a] #遍历函数赋值 >>> b [100, 100, 100, 100, 100, 10, 12, 14, 16, 100]
多维数组
>>> a = np.arange(0,20).reshape((4,5)) >>> a array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]) >>> a[2,3] 13 >>> a[:1] array([[0, 1, 2, 3, 4]]) >>> a[1:4,2] array([ 7, 12, 17]) >>> a[1:3,:] array([[ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) >>> a[-1] array([15, 16, 17, 18, 19]) >>> a[1] array([5, 6, 7, 8, 9])
数组形状操作
>>> a = np.floor(10*np.random.random((3,4))) >>> a array([[2., 0., 3., 6.], [0., 8., 6., 2.], [2., 6., 5., 2.]]) >>> a.shape #输出a的形状 (3, 4) >>> a.ravel() #输出平坦化后的a,a本身不改变 array([2., 0., 3., 6., 0., 8., 6., 2., 2., 6., 5., 2.]) >>> a array([[2., 0., 3., 6.], [0., 8., 6., 2.], [2., 6., 5., 2.]]) >>> a.shape=(6,2) #改变a的形状 >>> a array([[2., 0.], [3., 6.], [0., 8.], [6., 2.], [2., 6.], [5., 2.]]) >>> a.transpose() #输出a的转置 array([[2., 3., 0., 6., 2., 5.], [0., 6., 8., 2., 6., 2.]]) >>> a array([[2., 0.], [3., 6.], [0., 8.], [6., 2.], [2., 6.], [5., 2.]])
reshape和resize
在numpy模块中,我们经常会使用resize 和 reshape,在具体使用中,通常是使用resize改变数组的尺寸大小,使用reshape用来增加数组的维度。
resize
resize有两种使用方式,一种是没有返回值的,直接对原始的数据进行修改,还有一种用法是有返回值的,所以不会修改原有的数组值。
1.没有返回值
>>> a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) >>> aa = a.resize((3,3)) >>> a array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> aa >>> #没有返回值
2.有返回值
>>> a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) >>> aa = np.resize(a,(3,3)) >>> a array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) >>> aa array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
reshape
给数组一个新的形状而不改变其数据。
>>> a = np.array([1,2,3,4,5,6,7,8]) >>> aa=a.reshape((2,4)) #返回2*4的二维数组 >>> aaa=a.reshape((2,2,2)) #返回2*2*2的三维数组 >>> a array([1, 2, 3, 4, 5, 6, 7, 8]) >>> aa array([[1, 2, 3, 4], [5, 6, 7, 8]]) >>> aaa array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])