- Numpy 的属性
array = np.array([[1,2,3],
[2,3,4]])
print(array) # [1,2,3]
[2,3,4]
print(array.ndim) # 2
print(array.shape) # (2,3)
print(array.size) # 6
- 创建 array
a = np.array([2,3,4],[2,3,4])
a = np.zeros((3,4)) # 3行4列的0矩阵
a = np.ones((3,4)) # 3行4列的1矩阵
a = np.empty((3,4)) # 3行4列的空矩阵
a = np.arange(12).reshape((3,4)) # 从0-11的3行4列的矩阵,arrange 与 range 用法相同
a = np.linespace(1, 10, 6) # 从1-10生成6个等距线段,也可以用 reshape 改 shape
- 基础运算1
a = np.array([[1,1], # [[1,1],
[0,1]) [0,1]]
b = np.arange(4).reshape((2,2)) # [[0,1],
[2,3]]
c = a*b # [[0,1],
[0,3]]
c_dot = np.dot(a,b) # [[2,4],
[2,3]]
c_dot_2 = a.dot(b) # [[2,4],
[2,3]]
*
是对应元素做乘法,dot
是矩阵的乘法
np.dot(a,b)
与 a.dot(b)
只是写法不同,意义相同
4. 基础计算2
a = np.random.random((2,4))
print(a) # [[0.31402404 0.48486076 0.72364884 0.70226248]
[0.56745383 0.46239721 0.35811925 0.73955183]]
print(np.sum(a,axis=1)) # [2.22479612 2.12752212]
print(np.min(a,axis=0)) # [0.31402404 0.46239721 0.35811925 0.70226248]
print(np.max(a,axis=1)) # [0.72364884 0.73955183]
axis=0
是对每一行计算,axis=1
是对每一列计算,可以再运算中指定
5. 基础运算3
a = np.arange(2, 14).reshape((3, 4))
print(np.argmin(a)) # 最小值的索引
print(np.argmax(a)) # 最小值的索引
print(np.average(a))
print(np.mean(a))
print(a.mean()) # 平均值,三种方法一样
print(np.median(a)) # 中位数
print(np.cumsum(a)) # 累加值的一维矩阵
print(np.diff(a)) # 累差矩阵,与 a 矩阵的 shape 相同
print(np.nonzero(a)) # 输出每个非零数的行和列,行和列是分开的两个一维矩阵
print(np.transpose(a))
print(a.T) # 矩阵转置,两种方法一样
print(np.sort(a)) # 排序,针对每行排序
print(np.clip(a, 5, 9)) # 矩阵 a 中所有大于 9 的数设为 9,小于 5 的数设为 5,中间的数保留不变
- 索引
a = np.arange(3,15).reshape((3,4))
print(a) # [[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
print(a[1]) # [ 7 8 9 10]
print(a[2][1]) # 12
print(a[2, 1]) # 12,两种方法一样
for row in a: # 对行遍历,输出每一行
print(row)
for column in a.T: # 对列遍历,输出每一列
print(column)
print(a.flatten()) # 把矩阵 a 转变为一维矩阵
for item in a.flat: # flat 是一个迭代器,可以用来遍历每一个元素
print(item)
- array 的合并
a = np.array([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.shape) # (3,)
print(a[np.newaxis, :]) # [[1,1,1]]
print(a[np.newaxis, :].shape) # (1,3)
print(a[:, np.newaxis]) # [[1]
[1]
[1]]
print(a[:, np.newaxis].shape) # (3,1)
a = np.array([1, 1, 1])[:, np.newaxis]
b = np.array([2, 2, 2])[:, np.newaxis]
c = np.concatenate((a, b, b),axis=1) # [[1 2 2]
[1 2 2]
[1 2 2]]
c = np.concatenate((a, b, b),axis=0) # [[1]
[1]
[1]
[2]
[2]
[2]
[2]
[2]
[2]]
concatenate
设置 axis=0
与 np.hstack((a, b))
作用相同
concatenate
设置 axis=1
与 np.vstack((a, b))
作用相同
8. 分割
a = np.arange(12).reshape((3,4)) # [[ 0 1 2 3]
[ 4 5 6 7]
[ 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.split(a, 3, axis=0)) # [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 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]])]
array_split()
可以不等分矩阵
split()
设置 axis=0
与 np.vsplit((a, 3))
作用相同
split()
设置 axis=1
与 np.hsplit((a, b))
作用相同
注意:split 和 vsplit hsplit 都只能均分
9. copy deepcopy
a = np.arange(4) # [0 1 2 3]
b = a
c = a
b = a.copy() # 用 copy 赋值之后,再修改 a 就不会改变 b 的值,
# 但是直接赋值的 c 还是会随 a 改变
a[0] = 11
print(b) # [0 1 2 3]
print(c) # [11 1 2 3]