Numpy
Array
Array的属性
- 维数
- 形状——x行x列
- size——数组中所有元素数量的总数
# numpy.array常用的属性 arr = np.array([[1,2,3],[4,5,6]]) print(arr) print("number of dim:", arr.ndim) print("shape:", arr.shape) print("size:", arr.size)Numpy创建array
创建array时指定类型
a = np.array([2,3,4], dtype = np.double) a = np.array([2,3,4], dtype = int) a = np.array([2,3,4], dtype = float) print(a.dtype)创建多维array
b = np.array([[1,2,3],[4,5,6]])生成全0/1矩阵
# 生成全0/1矩阵 c1 = np.zeros((2,2),dtype = int) c2 = np.ones((3,3))默认情况下,zeros和ones的类型为float64
生成有序数组
d = np.arange(10,20,2)- np.arange()完整表达为arange([start],end,[step]),其中step不是必须项,start默认为0
- 生成的数组包含start,不包含end
将生成的数组转换为矩阵
e = np.arange(12).reshape(3,4)需要注意数组的元素个数要和矩阵的元素个数相同
生成线段
e2 = np.linspace(1,10,5)- linspace(初值,终值,段数),会自适应步长,包含终值
- 也可以使用reshape
Numpy基础运算
Array运算
- array的加减法
a1 = np.array([10,20,30,40])
a2 = np.arange(4)
res1 = a1 - a2
res2 = a1 + a2
两个维度相同的array对应元素进行运算
array的平方运算
res2 = a1**2对应元素进行平方运算
三角函数运算
res3 = 10*np.sin(a1) res3 = 10*np.cos(a1) res3 = 10*np.tan(a1)判断数组中的元素大于、小于、等于某个值
print(a1 > 3)
矩阵运算
a = np.array([[1,1], [0,1]])
b = np.arange(4).reshape(2,2)
元素逐个相乘
c = a * b两个矩阵不一定要同型。列相同按照列进行,行相同按照行进行
矩阵乘法
c_dot = np.dot(a, b) c = a.dot(b)计算规则的两个对象需要满足矩阵乘法的定义要求
生成随机矩阵
a = np.random.rand(2,4)参数为生成数组的形状,默认为一个数
矩阵中的max,min,sum
np.sum(a) np.max(a) np.min(a) print(np.max(a, axis=0)) # 输出每一每列的最大值函数由axis属性,axis=1代表对行操作,axis=0代表对列操作
矩阵元素的平均值
np.mean(A) np.average(A)可以用axis执行是对行还是列进行计算,axis=0对列,axis=1对行
矩阵中元素的中位数
np.median(A)矩阵元素逐项累加、累差
np.cumsum(A) np.diff(A)矩阵转置
np.transpose(A) A.T替换矩阵中值得范围
np.clip(A, 5, 9)clip(array,min,max)替换后,矩阵中大于max的值换为max,小于min的值替换为min
索引计算
通过索引访问
A[index] #一维 # 二维 A[index1][index2] A[index1,index2] A[index,:] # index-1行的所有数 A[:,index] # index-1列的所有数 A[index][index1:index2] # index-1行index1-1到index2-2的数- index从0开始计算
- 对于二维数组,如果只指定一个索引,则输出一整行
矩阵中最值的索引
np.argmin(A) np.argmax(A)矩阵中非零元素的坐标
np.nonzero(A)输出结果为两个array,第一个array代表元素的行索引,第二个array代表元素的列索引
矩阵元素排序
np.sort(A)这里的排序是对矩阵中的元素按行为单位进行排序
对行/列迭代
# 对行 for row in A: print(row) # 对列 for column in A.T: print(column)python中没有对列迭代的机制,可以迭代转置矩阵的行
迭代每一个元素
A.flat # 返回一个迭代器 A.flatten() # 返回一个一行的数组 for item in A.flat: print(item)
Array合并
按行上下合并(vertical stack)
C = np.vstack((A,B))水平合并到一行(horizontal stack)
C = np.hstack((A,B))利用concatenate()
C = np.concatenate((A,A,B,B), axis=0) # 等价于vstack() print(C) C = np.concatenate((A,A,B,B), axis=1) # 等价于hstack() print(C)
Array分割
从两个方向进行等量分割
print(np.split(A.T,2,axis=0)) # np.vsplit(A.T,2) print(np.split(A,2,axis=1)) # np.hsplit(A,2)可以理解为axis指定了对矩阵的某一个维度进行分割
如一个(4,6)的矩阵
axis=0,就是对4进行分割,分割成两个(2,6)的矩阵
copy和deep copy
- 如果对于两个数组,采用
b=a进行赋值,本质上是传递了对象的地址,当a改变值b也会改变 - 如果使用
b=a.copy()则仅仅是进行元素值的赋值,两者并没有相互关联
版权声明:本文为qq_42160460原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。