numpy 笔记
import numpy as np
入门基础
转化为矩阵
array = np.array([[1,2,3],[4,5,6]])
print(array)
[[1 2 3]
[4 5 6]]
输出矩阵维度
print(array.ndim)
2
输出形状
print(array.shape)
(2, 3)
共有多少元素
print(array.size)
6
创建numpy数组
a = np.array([[1,2,3,4],[4,5,6,7]],dtype=np.int) #dtype 定义数组格式 int/float/int32/int64/float32/float64
print(a.dtype)
int32
创建0矩阵
a = np.zeros((3,4))
print(a)
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
创建全1矩阵
a = np.ones((3,4),dtype=np.int16)
print(a)
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
创建空矩阵 (实际是无限接近0)
a = np.empty((3,4))
print(a)
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
生成有序的数列
a = np.arange(10,20,2)
print(a)
[10 12 14 16 18]
a = np.arange(12).reshape(3,4) #指定形状
print(a)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
生成线段
a = np.linspace(1,100,5)
print(a)
[ 1. 25.75 50.5 75.25 100. ]
a = np.linspace(1,100,10).reshape(2,5)
print(a)
[[ 1. 12. 23. 34. 45.]
[ 56. 67. 78. 89. 100.]]
基础运算
a = np.array([10,20,30,40])
b = np.arange(4)
print(a,b)
print('a+b:',a+b) #a+/-/*//b
[10 20 30 40] [0 1 2 3]
a+b: [10 21 32 43]
print('a的平方:',a**2)
a的平方: [ 100 400 900 1600]
c= 10*np.sin(a) #cos tan 相同
print(c)
[-5.44021111 9.12945251 -9.88031624 7.4511316 ]
矩阵判断
print(b)
print(b<3) #> < ==
[0 1 2 3]
[ True True True False]
矩阵乘法
a = np.array([[1,2],[3,4]])
b = np.arange(4).reshape((2,2))
c = a*b #逐个元素相乘
c_dot = np.dot(a,b) #矩阵乘法
c_dot_2 = a.dot(b) #与上相同 不同表达方式
print(c)
print(c_dot)
[[ 0 2]
[ 6 12]]
[[ 4 7]
[ 8 15]]
生成随机数 常用函数
a = np.random.random((2,4)) #生成两行4列0-1的随机数
print(a)
print(np.sum(a)) #求和
print(np.sum(a,axis=1)) # axis=1每一行进行求和,axis=0每一列进行求和
print(np.min(a)) #最小值
print(np.max(a)) #最大值
[[0.50073252 0.99121935 0.89618503 0.94605403]
[0.75885286 0.19195458 0.12275648 0.74767929]]
5.155434142539565
[3.33419093 1.82124321]
0.12275648261726968
0.9912193520810159
常用函数
A = np.arange(14,2,-1).reshape((3,4))
print(np.argmin(A)) #计算最小值的索引
print(np.argmax(A)) #最大值索引
print(np.mean(A)) #均值
print(np.average(A))
print(np.median(A)) #中位数
print(np.cumsum(A)) #累加
print(np.diff(A)) #累差
print(np.nonzero(A)) #找到非0的数 返回的两个数组分别是 行列索引
print(np.sort(A)) #排序 逐行排序
print(np.transpose(A)) #转置
print(A.T) #转置
print((A.T).dot(A))
11
0
8.5
8.5
8.5
[ 14 27 39 50 60 69 77 84 90 95 99 102]
[[-1 -1 -1]
[-1 -1 -1]
[-1 -1 -1]]
(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))
[[11 12 13 14]
[ 7 8 9 10]
[ 3 4 5 6]]
[[14 10 6]
[13 9 5]
[12 8 4]
[11 7 3]]
[[14 10 6]
[13 9 5]
[12 8 4]
[11 7 3]]
[[332 302 272 242]
[302 275 248 221]
[272 248 224 200]
[242 221 200 179]]
截取
a = np.arange(2,14).reshape(3,4)
print(a)
print(np.clip(a,5,10)) #大于5小于10的保留 其余取上下界
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
[[ 5 5 5 5]
[ 6 7 8 9]
[10 10 10 10]]
索引
a = np.arange(2,14).reshape(3,4)
print(a)
print(a[1]) #输出第一行
print(a[1][1])#输出第1行第1列
print(a[1,1])
print(a[1,:]) #输出第一行全部 : 左开右闭
print(a)
print(a.T)
for column in a.T: # 输出每行
print(column)
#遍历每一个元素
print(a.flatten()) #矩阵转换为一维数组
for item in a.flat:
print(item)
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
[6 7 8 9]
7
7
[6 7 8 9]
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
[[ 2 6 10]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]]
[ 2 6 10]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 2 3 4 5 6 7 8 9 10 11 12 13]
2
3
4
5
6
7
8
9
10
11
12
13
array合并
a = np.array([1,1,1])
b = np.array([2,2,2])
print(np.vstack((a,b))) #vertical stack 垂直合并
print(np.hstack((a,b))) #horizontal stack 左右合并
C=np.vstack((a,b))
D=np.hstack((a,b))
print(A.shape)
print(D.shape) #(6,)
print(D[:,np.newaxis].shape) #(6,1)
print(D[:,np.newaxis])
print(np.concatenate((a,a,b,b),axis=0)) #按列合并 左右合并
[[1 1 1]
[2 2 2]]
[1 1 1 2 2 2]
(3, 4)
(6,)
(6, 1)
[[1]
[1]
[1]
[2]
[2]
[2]]
[1 1 1 1 1 1 2 2 2 2 2 2]
array分割
a = np.arange(12).reshape((3,4))
print(a)
print('-----------------------------------')
print(np.split(a,2,axis=1)) #按列分割 分成两块
print('-----------------------------------')
print(np.split(a,3,axis=0)) #按行分割 成三块
print('-----------------------------------')
#不等量分割
print(np.array_split(a,3,axis=1))
print('-----------------------------------')
print(np.vsplit(a,3))
print('-----------------------------------')
print(np.hsplit(a,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([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
-----------------------------------
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
-----------------------------------
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
-----------------------------------
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
深浅拷贝
a = np.arange(4)
print(a)
b=a
c=b
print(b)
print(c)
a[2]=99 #copy 改变原来的数组 全部改变
print(a)
print(b)
print(c)
print('-----------------------------------')
a = np.arange(4)
print(a)
b = a.copy() #deep copy 改变原数组 赋值的不改变 b=a[:] 效果一样
print(b)
a[2]=99
print(a)
print(b)
[0 1 2 3]
[0 1 2 3]
[0 1 2 3]
[ 0 1 99 3]
[ 0 1 99 3]
[ 0 1 99 3]
-----------------------------------
[0 1 2 3]
[0 1 2 3]
[ 0 1 99 3]
[0 1 2 3]
网友评论