常用属性
arr = np.array([…],dtype = ) 后文arr就是ndarray
1.np.array( list ) 把list变为ndarray
2.arr.shape eg:(2,3) 元组 2x3矩阵
arr.size 元素个数arr.dim 维度 (2维矩阵 [ [],[] ] 3维矩阵 [
[ [ ],[ ],[ ] ] ,
]
arr的type叫做dtype 可取: np.int (int64) np.int32 np.float16,np.float(64)等
arr.dtype属性
生成ndarray
a = np.zeros( shape ) shape是元组 全0矩阵
a = np.ones( (3,4) ,dtype = np.int16) 3行4列的全1矩阵
a = np.arange( begin(0),end,step(1) ) 等差数列
end - begin)/step = 元素个数
a = np.arange(12) 12个元素 0~11
可以使用 a.reshape((3,4)) 3行4列
生成线段
a = np.linspace(1,10, 20(段数)) 1~10分为20段 1段0.45
a = 1. 1.476545 1.948465 … 共20个
只要改变ndarray的形状都可以用reshape()方法
基础运算 a,b 两个ndarray
矩阵加法:a + b
矩阵幂 :b**2 (二次方)
c = 10*np.sin( a ) 对每个a的值求sin,然后乘以10得出的新ndarray
cos,tan同理。
b = np.arange(4)
小于3的元素判断 ( 比较运算符=》 对每个元素的判断)
print(b<3) >>> [true,true,true,false] 是个bool数组
print(b==3)同理。
矩阵运算
a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape((2,2))
*: 逐个相乘
c = a*b
矩阵乘法:(点乘)
c = np.dot(a,b)
or
c = a.dot(b)
随机数
a = np.random.random( shape )返回一个shape的随机数矩阵a
np.sum(),np.max(),np.min()求出矩阵中的这些值 (对每个值)
axis = 0, 行 =1 列
np.sum(a,axis = 1) 对每一列求和
np.min(a,axis = 0) 对每一行寻找最小值
重要运算(索引)
A = np.arange(2,14).reshape((3,4)) 12个元素 三行四列 2~13
[
[2,3,4,5],
[6,7,8,9],
[10,11,12,13]
]
计算最小值的索引(第多少个,平铺数组)
np.argmin(A) A中最小元素的索引>>> 0 第1个
np.argmax(A) A中最大元素的索引>>> 11
np.mean(A) or A.mean() 矩阵所有元素的平均值
np.median(A) 中位数
np.sort(A) 对A排序(默认对各行排序,不是平铺)
np.transpose(A) or A.T A转置
np.clip(A,minV,maxV)把A中所有小于minV的值都替换为minV,大于maxV的都换为maxV
不常用:
np.diff(A) ai和ai+1的差
np.cumsum(A) 累加 eg:第一列变成:[2,5,9,14]
以上操作都可以用axis只针对某维做相应计算
索引(切片)与迭代
A = np.arange(3,15)
A[3]=> 6
A = np.arange(3,15).reshape((3,4))
A[2] = [11,12,13,14]
A[2][1] or A[2,1] = 12
[begin]:(end) 切片(: 默认 所有值)
A[2,:] = A[2]
A[:,0] 第一列的所有值。 [3,7,11]
A[1,1:3] 第一行的第2,3个的值
遍历/迭代:
此时对A进行迭代,迭代的是行(二维)
for row in A:
...
如何迭代列? 先转置为A.T,再迭代即可。
for column in A.T:
...
如何迭代每个元素?平铺为一维数组(A.flat) 然后迭代。
for item in A.flat:
....
两个array合并
A = np.array([1,1,1]) shape:(3,)
B = np.array([2,2,2])
向下合并 np.vstack()
C = np.vstack(A,B) shape:(2,3)
C =
[
[1,1,1]
[2,2,2]
]
横向合并 np.hstack()
D = np.hstack(A,B) shape:(6,)
D = [1 1 1 2 2 2]
多array合并 np.concatenate((a1,a3,…),axis = )
E = np.concatenate((A,B,A),axis = 0) 行上合并
[1 1 1 2 2 2 1 1 1]
import numpy as np
A = np.array([[1],[1],[1]])
B = np.array([[2],[2],[2]])
C = np.concatenate((A,B,A),axis = 1)
print(C)
[[1 2 1]
[1 2 1]
[1 2 1]]
numpy分割array
import numpy as np
A = np.arange(12).reshape((3,4))
print(A)
print(np.split(A,2,axis = 1)) # 对A数组 axis=1 按列 2个2个切割(等量分割)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])] #这两个array一定是等大小的,否则会报错
不等量分割:
np.array_split(A,3,axis=1)
import numpy as np
A = np.arange(12).reshape((3,4))
print(A)
print(np.array_split(A,3,axis=1)) # 对A数组 axis=1 按列 2个2个切割
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
纵向分割:np.vsplit(A,纵向分成多少个array) 一定是axis = 1的分割
同理有np.hsplit(A,个数)
import numpy as np
A = np.arange(12).reshape((3,4))
print(A)
print(np.vsplit(A,3)) # 对A数组 axis=1 按列 2个2个切割
print(np.hsplit(A,2))
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
3个数组
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
2个数组
赋值
import numpy as np
A = np.arange(4)
b =A
c = b
A[0] = 11
print(A,b,c)
= 就是引用。浅拷贝。
若要深拷贝:
b = A.copy() 即可。