Numpy矩阵常用操作
1.e指数运算与开根号
import numpy as np
B = np.arange(3) #生成0到2的向量[0 1 2]
print(B)
print(np.exp(B)) #以B中每个元素为指数,每个对应位置元素求e的指数次幂
print(np.sqrt(B)) #B中每个对应位置元素开根号
结果是:
[0 1 2]
[ 1. 2.71828183 7.3890561 ] #每个对应位置元素求e的指数次幂
[ 0. 1. 1.41421356] #每个对应位置元素开根号
2. floor向下取整,ravel()拉直成向量和矩阵转置
a = np.floor(10*np.random.random((3,4)))#创建一个每元素乘10的(3,4)随机矩阵,floor表示向下取整
print(a)
print(a.ravel()) #将矩阵拉直成向量
a.shape = (6,2) #转换成(6,2)的矩阵
print(a)
print(a.T) #矩阵转置
结果是:
[[ 8. 7. 7. 4.]
[ 3. 9. 3. 1.]
[ 7. 3. 0. 2.]] #每元素乘10的(3,4)随机矩阵,并向下取整
[ 8. 7. 7. ..., 3. 0. 2.] #将矩阵拉直成了向量
[[ 8. 7.]
[ 7. 4.]
[ 3. 9.]
[ 3. 1.]
[ 7. 3.]
[ 0. 2.]] #转换成了(6,2)的矩阵
[[ 8. 7. 3. 3. 7. 0.]
[ 7. 4. 9. 1. 3. 2.]] #矩阵转置
也可a.reshape = (3, -1),表示指定为3行的矩阵,列数自动确定
3.矩阵拼接
a = np.floor(10*np.random.random((2,2)))
b = np.floor(10*np.random.random((2,2)))
print(a)
print(b)
print(np.hstack((a,b))) #把a和b进行矩阵横着拼接
结果是:
[[ 6. 1.]
[ 5. 2.]] #a
[[ 7. 4.]
[ 4. 1.]] #b
[[ 6. 1. 7. 4.]
[ 5. 2. 4. 1.]] #a和b的横拼接矩阵
另:np.vstack((a,b)是纵着拼接
4.矩阵的切分
a = np.floor(10*np.random.random((2,12)))
print(a)
print(np.hsplit(a,3)) #将矩阵竖着均分为三份(2,4)矩阵
print(np.hsplit(a,(3,4))) #在a的第3列和第4列分别竖着切一刀得三个矩阵(2,3)(2,1)(2,8)
b = np.floor(10*np.random.random((12,2)))
print(b)
print(np.vsplit(b,3)) ##将矩阵b横着均分为三份(4,2)矩阵
结果是:
[[ 3. 9. 3. ..., 7. 6. 3.]
[ 2. 3. 8. ..., 0. 8. 1.]] #(2,12)矩阵
[array([[ 3., 9., 3., 5.],
[ 2., 3., 8., 8.]]), array([[ 0., 2., 2., 0.],
[ 3., 8., 9., 3.]]), array([[ 4., 7., 6., 3.],
[ 2., 0., 8., 1.]])] #竖着均分的三份(2,4)矩阵
[array([[ 3., 9., 3.],
[ 2., 3., 8.]]), array([[ 5.],
[ 8.]]), array([[ 0., 2., 2., ..., 7., 6., 3.],
[ 3., 8., 9., ..., 0., 8., 1.]])] #三个(2,3)(2,1)(2,8)的矩阵
[[ 7. 5.]
[ 9. 6.]
[ 7. 3.]
...,
[ 6. 6.]
[ 4. 6.]
[ 9. 3.]] #(12,2)矩阵
[array([[ 7., 5.],
[ 9., 6.],
[ 7., 3.],
[ 2., 8.]]), array([[ 9., 6.],
[ 2., 9.],
[ 2., 0.],
[ 8., 6.]]), array([[ 0., 6.],
[ 6., 6.],
[ 4., 6.],
[ 9., 3.]])] #均分的三份(4,2)矩阵
5.numpy的argsort()方法
import numpy as np
x=np.array([1,4,3,-1,6,9,-5])
y1 = x.argsort() #从小到大排序,并输出对应的原index
print("y1:",y1)
y2 = x.argsort()[::-1] #从大到小排序并输出对应的原index
print("y2:",y2)
y6 = (-x).argsort() #同样是从大到小排序并输出对应的原index
print("-x:",-x)
print("y6:",y6)
y3 = x.argsort()[-1] #返回最大值的index
print("y3:",y3)
y4 = x.argsort()[-2] #返回第二大值的index
print("y4:",y4)
y5 = x.argsort()[0] #返回最小值的index
print("y5:",y5)
keep=[]
while y2.size:
print("y2.size:",y2.size)
i = y2[0]
keep.append(i)
print("111",keep)
value = np.array([False,False,False,False,False,False,False])
y2 = y2[value]
print("y2.size:",y2.size)
print("y2:",y2)
print("keep:",keep)
结果是:
y1: [6 3 0 2 1 4 5]
y2: [5 4 1 2 0 3 6]
-x: [-1 -4 -3 1 -6 -9 5]
y6: [5 4 1 2 0 3 6]
y3: 5
y4: 4
y5: 6
y2.size: 7
111 [5]
y2.size: 0
y2: []
keep: [5]