numpy—科学计算库
-
e的次幂,开根号
import numpy as np
B = np.arange(3)
print(B)
print(np.exp(B))
print(np.sqrt(B))
—[0 1 2]
[ 1. 2.71828183 7.3890561 ]
[ 0. 1. 1.41421356] -
ravel 是将一个矩阵拉平成一个向量,即用向量的形式表示这个矩阵。而a.shape(6,2)又将一个向量转换为一个62的矩阵。a.T表示求矩阵a的一个转置矩阵 行和列进行变换。(如果整形操作中给定的维度为-1,则自动计算其他维度)
a = np.floor(10np.random.random((3,4)))
print(a)
print(a.shape)
print(a.ravel())
a.shape = (6, 2)
print(a)
print(a.T)
a.resize((2,6))
print(a)
a.reshape(3,-1)
print(a)
—[[ 4. 9. 9. 9.]
[ 7. 1. 0. 9.]
[ 0. 4. 4. 9.]]
(3, 4)
[ 4. 9. 9. 9. 7. 1. 0. 9. 0. 4. 4. 9.]
[[ 4. 9.]
[ 9. 9.]
[ 7. 1.]
[ 0. 9.]
[ 0. 4.]
[ 4. 9.]]
[[ 4. 9. 7. 0. 0. 4.]
[ 9. 9. 1. 9. 4. 9.]]
[[ 4. 9. 9. 9. 7. 1.]
[ 0. 9. 0. 4. 4. 9.]]
[[ 5. 2. 2. 7.]
[ 5. 3. 2. 8.]
[ 8. 0. 2. 6.]]
- np.hstack((a,b)) 将a矩阵和b矩阵进行横向拼接;np.vstack((a,b))将a矩阵和b矩阵进行纵向拼接;
a = np.floor(10np.random.random((2,2)))
b = np.floor(10np.random.random((2,2)))
print(a)
print(’—’)
print(b)
print(’—’)
print(np.hstack((a,b)))
—[[ 0. 1.]
[ 2. 6.]]
—[[1. 0.]
[4 .1 ]]
[[ 0. 1. 1. 0.]
[ 2. 6. 4. 1.]]
- hsplit是对行进行切分 a表示待切分的行参数 3表示切分成三份;np.hsplit(a,(3,4)) 传入元组 指定位置进行切割;vsplit是对列进行切分 a表示待切分的行参数 3表示切分成三份
a = np.floor(10np.random.random((2,12)))
print(a)
print(np.hsplit(a,3))
print(np.hsplit(a,(3,4))) #在第三列和第四列之后拆分a
a = np.floor(10np.random.random((12,2)))
print(a)
np.vsplit(a,3)
—[[ 2. 9. 0. 3. 9. 6. 6. 1. 5. 2. 8. 0.]
[ 3. 4. 5. 7. 7. 3. 7. 1. 3. 4. 7. 9.]]
[array([[ 2., 9., 0., 3.],
[ 3., 4., 5., 7.]]),
array([[ 9., 6., 6., 1.],
[ 7., 3., 7., 1.]]),
array([[ 5., 2., 8., 0.],
[ 3., 4., 7., 9.]])]
[array([[ 2., 9., 0.],
[ 3., 4., 5.]]),
array([[ 3.],
[ 7.]]),
array([[ 9., 6., 6., 1., 5., 2., 8., 0.],
[ 7., 3., 7., 1., 3., 4., 7., 9.]])]
[[ 7. 9.]
[ 0. 6.]
[ 2. 4.]
[ 5. 2.]
[ 7. 4.]
[ 1. 2.]
[ 9. 2.]
[ 5. 7.]
[ 5. 5.]
[ 5. 5.]
[ 1. 9.]
[ 5. 3.]]
[array([[ 7., 9.],
[ 0., 6.],
[ 2., 4.],
[ 5., 2.]]),
array([[ 7., 4.],
[ 1., 2.],
[ 9., 2.],
[ 5., 7.]]),
array([[ 5., 5.],
[ 5., 5.],
[ 1., 9.],
[ 5., 3.]])]
-
简单的赋值,a与b的地址是相同的,这个就是所谓的深复制
a = np.arange(12)
b = a
b is a #a和b是同一个ndarray对象的两个名称
b.shape = 3,4
print(a.shape)
print(id(a))
print(id(b))
—(3, 4)
117452112
117452112 -
视图方法创建一个新的数组对象,该数组对象查看相同的数据(view是浅复制),浅复制不会复制a的地址到c,
改变c的值不会影响到a,改变c的值不会影响到a
c = a.view()
c is a
c.shape = 2,6
print(a.shape)
c[0,4] = 1234
print(a)
—(3, 4)
[[ 0 1 2 3]
[1234 5 6 7]
[ 8 9 10 11]] -
copy也是属于浅拷贝
d = a.copy()
d is a
d[0,0] = 9999
print(d)
print(a)
—[[9999 1 2 3]
[1234 5 6 7]
[ 8 9 10 11]]
[[ 0 1 2 3]
[1234 5 6 7]
[ 8 9 10 11]] -
argmax 索引最大值的位置,data.argmax(axis=0) axis=0意思是指定列去索引 找出最大值返回索引值的位置
import numpy as np
data = np.sin(np.arange(20)).reshape(5,4)
print(data)
ind = data.argmax(axis=0)
print(ind)
data_max = data[ind, range(data.shape[1])]
print(data_max)
—[[ 0. 0.84147098 0.90929743 0.14112001]
[-0.7568025 -0.95892427 -0.2794155 0.6569866 ]
[ 0.98935825 0.41211849 -0.54402111 -0.99999021]
[-0.53657292 0.42016704 0.99060736 0.65028784]
[-0.28790332 -0.96139749 -0.75098725 0.14987721]]
[2 0 3 1]
[ 0.98935825 0.84147098 0.99060736 0.6569866 ] -
tile 对当前的行和列进行扩展(矩阵由原来的一维扩展到了三行五列)
a = np.arange(0, 40, 10)
b = np.tile(a, (3, 5))
print(b)
—[[ 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30]
[ 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30]
[ 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30]] -
tile扩展
a = np.arange(0, 40, 10)
print(a)
b = np.tile(a, (1, 4))
print(b)
—[ 0 10 20 30]
[[ 0 10 20 30 0 10 20 30 0 10 20 30 0 10 20 30]] -
sort 对当前的数组按照行的维度进行排序(因为axis=1),argsort 是对值的索引进行排序 默认是值从小到大 然后按照值排序获取索引,输出索引
a = np.array([[4, 3, 5], [1, 2, 1]])
print(a)
b = np.sort(a, axis=1)
print(b)
a.sort(axis=1)
print(a)
a = np.array([4, 3, 1, 2])
j = np.argsort(a)
print(j)
print(a[j])
—[[4 3 5]
[1 2 1]]
[[3 4 5]
[1 1 2]]
[[3 4 5]
[1 1 2]]
[2 3 1 0] #按索引序号排列,输出索引
[1 2 3 4] #输出索引对应的数据