numpy总结
numpy的属性
numpy是基于矩阵的运算
import numpy as np
#将一个列表转换为矩阵
array = np.array([[1,2,3],
[2,3,4]])
print(type(array)) # <class 'numpy.ndarray'>
print(array.ndim) # 维度数 2
print(array.shape) # 形状 (2,3)
print(array.size) # 大小 6 总共的元素个数
print(array.dtype) # 元素类型 int
如果要修改dtype的属性的操作办法是
array = array.astype(np.int16)
numpy的创建array
import numpy as np # 根据列表创建array dtype表示元素的类型np.int8 np.int16 np.int32 np.int64 np.float64 np.float32 np.float16 a = np.array([[1,2,3],[4,5,6]],dtype=np.int32) print(a.dtype) # int32 # 使用np.zeros()创建全0的矩阵 同理可以使用np.ones()定义全1的矩阵 也可以使用参数dtype定义元素类型 # np.empty() 定义的是非常接近0的矩阵 a = np.zeros((2,3,4)) # 参数为形状,需要使用()括起来 print(a) # [[[0. 0. 0. 0.] # [0. 0. 0. 0.] # [0. 0. 0. 0.]] # # [[0. 0. 0. 0.] # [0. 0. 0. 0.] # [0. 0. 0. 0.]]] # np.arange() 如果只有一个参数15,则相当于np.arange(0,15,1) a = np.arange(10,18,2) # 起始值为10,终止值为18(不包括18),步长为2的一维矩阵 print(a) # [10 12 14 16] # 通过使用reshape()可以重新定义矩阵的维度 print(np.arange(12).reshape((3,4))) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] # np.linspace() 按线段生成,也就是等距离生成5个数在[1,10]之间 print(np.linspace(1,10,5)) # [ 1. 3.25 5.5 7.75 10. ]
numpy的基础运算
import numpy as np a1 = np.array([10,20,30,40]) a2 = np.array([0,1,2,3]) # 加减乘除 print(a1+a2) # [10 21 32 43] 加减乘除是对应元素相加减,a1**3这时a1的三次方 # 三角函数 np.sin() np.cos() np.tan() print(np.tan(a2)) # 判断运算 > < >= <= == a3 = np.array([[1,2,3],[2,3,4]]) print(a3 == 3) # 返回一个矩阵形式,满足条件为True,否则为False # [[False False True] # [False True False]] # 矩阵乘 a1 = np.array([[1,2],[2,3]]) a2 = np.array([[2,4],[3,5]]) print(a1.dot(a2)) # np.dot(a1,a2) # [[ 8 14] # [13 23]] # 求和np.sum() 最小值np.min() 最大值np.max() a = np.array([[1,2], [3,4]]) print(np.sum(a)) # 在整个矩阵上求和 10 print(np.sum(a,axis=0)) # axis表示维度 0是按列求和 [4 6] print(np.sum(a,axis=1)) # 1 按行求和 [3 7] a = np.arange(36).reshape((2,6,3)) b = np.arange(36).reshape((2,6,3)) b = b- 2 print(np.abs(b-a)) print(np.sum((b-a)>-3)) print(np.sum(a-b,axis=2)) print(np.sum(a>20)) #获得矩阵最大值最小值的索引,平均值,中位数,累加和,累差,非0的位置,逐行排序,矩阵转置,矩阵片段转换 A = np.arange(2,14).reshape((3,4)) # 可以使用axis表示指定行还是列,0按列,1按行 print(np.argmin(A)) # 返回最小值的索引 0 print(np.argmax(A)) # 返回最大值的索引 11 print(np.mean(A)) # 等价于A.mean() 返回矩阵的平均值 7.5 print(np.median(A)) # 返回矩阵的中位数 7.5 print(A) # [[ 2 3 4 5] # [ 6 7 8 9] # [10 11 12 13]] print(np.cumsum(A)) # 返回累加和,也就是前缀和 [ 2 5 9 14 20 27 35 44 54 65 77 90] print(np.diff(A)) # 返回的是行数相同,但是列数减1,相邻两个值的差 # [[1 1 1] # [1 1 1] # [1 1 1]] print(np.nonzero(A)) # 返回两个数组,第一个是非0的行,第二个是非0的列 # (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64)) print(np.sort(A)) # 逐行排序,也就是只在单行内进行排序 print(np.transpose(A)) # 矩阵的转置 等价于A.T # [[ 2 6 10] # [ 3 7 11] # [ 4 8 12] # [ 5 9 13]] print(np.clip(A,5,9)) # 也就是让矩阵中所有小于5的值变为0,所有大于9的值变为9,其余值不变 # [[5 5 5 5] # [6 7 8 9] # [9 9 9 9]]
numpy的索引
import numpy as np A = np.arange(2,14) print(A[2]) # 4 A = A.reshape((3,4)) print(A[2]) # [10 11 12 13] 整个第三行的值 等价于A[2,:] print(A[2][1]) # 等价于A[2,1] 11 第三行第二列的值 for row in A: # 直接迭代矩阵,默认的是迭代行,每次输出一行的内容 print(row) # [2 3 4 5] # [6 7 8 9] # [10 11 12 13] for column in A.T: # 通过转置迭代每一列 print(column) # [ 2 6 10] # [ 3 7 11] # [ 4 8 12] # [ 5 9 13] print(A.flatten()) # 变成一行 [ 2 3 4 5 6 7 8 9 10 11 12 13] # 遍历每一个元素 for item in A.flat: # A.flat和A.flatten()一样,不过返回的是一个迭代器 print(item,end=" ") # 2 3 4 5 6 7 8 9 10 11 12 13
numpy的array合并
import numpy as np A = np.array([1,1,1]) # 不能使用A.T因为这时序列,不是矩阵,[[1,1,1]]是矩阵 B = np.array([2,2,2]) print(np.vstack((A,B))) # 上下合并 # [[1 1 1] # [2 2 2]] print(np.hstack((A,B))) # 左右合并 # [1 1 1 2 2 2] print(A[np.newaxis,:]) # 加一个维度 # [[1 1 1]] print(A[:,np.newaxis]) # [[1] # [1] # [1]] A = np.array([[1],[1]]) B = np.array([[2],[2]]) print(np.concatenate((A,B,A),axis=0)) # 0代表行合并 # [[1] # [1] # [2] # [2] # [1] # [1]] print(np.concatenate((A,B,A),axis=1)) # [[1 2 1] # [1 2 1]]
numpy的array分割
import numpy as np A = np.arange(12).reshape((3,4)) print(np.split(A,3,axis=0)) # 按行分割,将矩阵A均分为3份,如果不能整除则报错 # [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])] print(np.split(A,2,axis=1)) # [array([[0, 1], # [4, 5], # [8, 9]]), array([[ 2, 3], # [ 6, 7], # [10, 11]])] print(np.array_split(A,3,axis=1)) # 可以实现不均等分割 # [array([[0, 1], # [4, 5], # [8, 9]]), array([[ 2], # [ 6], # [10]]), array([[ 3], # [ 7], # [11]])] print(np.vsplit(A,3)) # [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])] print(np.hsplit(A,2)) # [array([[0, 1], # [4, 5], # [8, 9]]), array([[ 2, 3], # [ 6, 7], # [10, 11]])]
numpy的copy和deep copy
import numpy as np a = np.arange(4) # 单纯的=的赋值相当于引用,也就是相当于一个矩阵的两个名字而已,说到底还是一个矩阵 # 所以改变a,那么b的值也会相应的发生改变 # 使用a.copy()赋值表示知识将值赋值过去,相当于重新生成了一个新的矩阵过去,那么改变a,则c的值不会发生改变 # 对于=,使用 a is b的结果是True,对于a.copy() 使用a is c的结果是False b = a a[0] = 5 print(a) # [5 1 2 3] print(b) # [5 1 2 3] print(a is b) # True c = a.copy() a[0] = 10 print(c) # [5 1 2 3] print(c is a) # False
如果要修改dtype的属性的操作办法是
array = array.astype(np.int16)
作者:孙建钊
出处:http://www.cnblogs.com/sunjianzhao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。