Numpy矩阵常用操作

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]

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值