1.基础运算
对于np的很多计算,如max,mean,min,cumsum函数都有一个axis属性,当axis等于0时对于列计算,等于1时对于行计算
for example, min函数
import numpy as np A = np.array(range(14, 2, -1)).reshape(3, 4) print(A) print('------------') print(np.min(A, axis=0)) print(np.min(A, axis=1))
结果
累加 cumsum()
import numpy as np A = np.array(range(2,14)).reshape(3,4) print(A) print(np.cumsum(A))
结果:
累差:diff()
import numpy as np A = np.array(range(2,14)).reshape(3,4) print(A) print(np.diff(A))
结果:
非零项 nonezero()
import numpy as np A = np.array(range(2,14)).reshape(3,4) print(A) print(np.nonzero(A))
他会输出由两个列表构成的元组,表示非零元素的位置。在这个例子中第一个列表是非零项的行数,第二个列表是非零项的列数
排序 sort()
import numpy as np A = np.array(range(14,2,-1)).reshape(3,4) print(A) print(np.sort(A))
结果:
转置 transpose() 或者 array的T属性
import numpy as np A = np.array(range(14,2,-1)).reshape(3,4) print(A) print(np.transpose(A)) print(A.T)
clip():
import numpy as np A = np.array(range(14, 2, -1)).reshape(3, 4) print(A) print(np.clip(A, 5, 9))
clip函数把A中小于5的变成都赋值成5,把大于9的赋值成9
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.索引
import numpy as np A = np.arange(3,15).reshape(2,3,2) print(A) print(A[0][1]) print(A[0,1])
结果:
这两种方式输出了同样结果
第零行 第一到第二的值
import numpy as np A = np.arange(3,15).reshape(2,3,2) print(A[0][1:2]) print(A[0,1:2])
结果:
遍历
行可以直接用for语句进行迭代,列可以迭代向量的转置,迭代所有元素可以用flat属性
import numpy as np A = np.arange(3,15).reshape(2,3,2) #行迭代 for i in A: print(i) #列迭代 for i in A.T: print(i) #迭代所有元素 for i in A.flat: print(i)
合并:
1.vstack和hstack
import numpy as np A = np.array([1, 1, 1]) B = np.array([2, 2, 2]) V = np.vstack((A, B)) #vertical stack 上下合并 H = np.hstack((A,B)) #horizontal stack 左右合并 print(A.shape) print(V.shape) print(H.shape)
2.concatenate 合并可以进行多个数列的合并
import numpy as np A = np.array([1, 1, 1])[:,np.newaxis] B = np.array([2, 2, 2])[:,np.newaxis] C = np.concatenate((A,B),axis=1) print(C)
需要注意的是, concatenate 要用在二维数据,所以如果上面代码中没有加上[:,np.newaxis]的话或出现下面错误
这就是因为没有增加维度的向量是一维的,只有长而没有宽,无法进行vertical合并
增加维度 np.newaxis 、reshape:
import numpy as np A = np.array([1, 1, 1]) A_T = A.T print(A.shape) print(A_T.shape) print(A.reshape(3,1).shape) print(A[:,np.newaxis].shape)
可以看到numpy中的转置并没有把原来一行的数列转化成一列的数列
我们可以通过reshape 或者 使用[:,np.newaxis]增加维度
分割
np.split()
import numpy as np A = np.array(range(12)).reshape(3, 4) print(np.split(A, 3, axis=0)) print(np.split(A, 2, axis=1))
其中axis默认为0,也就是按照行分
np.array_spilit()
与split唯一不同的是,array_split()可以不等分,如下:
import numpy as np A = np.array(range(12)).reshape(3, 4) print(np.array_split(A, 3, axis=1))
分成了1 1 2 的形式
当然还可以用vsplit hsplit 这里就不赘述了
深度复制
numpy中的向量和python中的列表一样,一般的copy只是多了一个引用而已,所以需要copy()
import numpy as np A = np.array(range(6)) B = A C = A.copy() A[0] = -1 print(A) print(B) print(C)
可以看到当A发生变化之后B也随之改变,而通过deep copy得到的C没有改变