numpy的相关知识

numpy相关知识


  • 数组的创建
import numpy as np #导入numpy包

vector = np.array([5,10,15,20]) #创建一维数组

#创建3*3数组
matrix = np.array([[5,10,15],[20,25,30],[35,35,40]]) 
print(vector)
print(matrix)

#输出结果
vector:[ 5 10 15 20],
matrix:[[ 5 10 15]
         [20 25 30]
         [35 35 40]]

numpy 中的array是用来创建矩阵(向量)的方法

  • 数组的处理
data = matrix[1,1] #选取vector数组的第2行,第2列

#此处的操作类似其他语言中的二维数组元素的选取,matrix[1][1]
print(data)

data:25
  • 数组的切片处理
a = vectory[0:2] #选取第一个到第二个之间的数据
print(a)

a:[ 5 10]

更高级的用法

b = matrix[:,0:2] #选取全部行的第0列到第2列之间的数据
c = matrix[0:1,0:2] #选取第0行到第2行的第0列到第2列之间的数据
print(b)
print(c)

b:[[ 5 10]
 [20 25]
 [35 35]]
c:[[ 5 10]
 [20 25]]
  • 数组比较的处理
d = (vectory == 10) #将数组里面的元素挨个与10比较,获得一个数组
print(d)

d:[False  True False False]
  • 矩阵的初始化
#从0到15转换为一个3*5的矩阵
a = np.arange(15).reshape(3,5)
#从5到30,步长为5
b = np.arange(5,30,5)
print(a)
print(b)

a:[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
b:[ 5 10 15 20 25]
#生成一个3*4的全为0的矩阵,元素格式是float32
zero = np.zeros((3,4),dtype=np.float32)
#生成一个2*3*4的全是1的矩阵
one = np.ones((2*3*4))
#随机生成的2*3的矩阵
ran = np.random.random((2,3))
print(zero)
print(one)
print(ran)

zero:array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]], dtype=float32)
one:array([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],

       [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]])
ran:array([[0.34817089, 0.61185558, 0.12936576],
       [0.04225644, 0.40562247, 0.5929412 ]])
  • 矩阵的维度
w = zero.ndim
print(w)

w:2
  • 內积
aa = np.array([[1,1],[0,1]])
bb = np.array([[2,0],[3,4]])

#内积
cc = aa.dot(bb)
dd = np.dot(aa,bb)
print(cc)
print(dd)

cc:[[5 4]
 [3 4]]
dd:[[5 4]
 [3 4]]
  • 矩阵转向量,矩阵改变形式
a2 = np.floor(10*np.random.random((3,4)))

#矩阵转向量
b2 = a2.ravel()

#改变矩阵的形式
a2.shape = (6,2)
print(a2)
print(b2)

a2:[[0. 7. 8. 0.]
 [5. 9. 8. 9.]
 [4. 6. 5. 9.]]
b2:[0. 7. 8. 0. 5. 9. 8. 9. 4. 6. 5. 9.]
  • 数组的拼接操作
a3 = np.floor(10*np.random.random((2,2)))
a4 = np.floor(10*np.random.random((2,2)))

print(a3)
print(a4)
#数组的拼接操作
#水平拼接
print(np.hstack((a3,a4)))
#垂直操作
print(np.vstack((a3,a4)))
a3:[[0. 0.]
 [2. 2.]]
a4:[[4. 9.]
 [3. 5.]]
水平拼接:[[0. 0. 4. 9.]
 [2. 2. 3. 5.]]
垂直拼接:[[0. 0.]
 [2. 2.]
 [4. 9.]
 [3. 5.]]
  • 浅拷贝
  #浅拷贝
  a = np.arange(12)

  b = a

  b.shape = (3,4)

  print(a.shape)
  print(id(a))
  print(id(b))
  a.shape: (3,4)
  id(a):139664825349024
  id(b):139664825349024
  • 介于深拷贝和浅拷贝之间的数据共享
 #创建一个数组,数据部分共享
  c = a.view()
  print(c is a)

  c.shape = (2,6)

  c[1,1] = 1234

  print(a)
  print(c)
  c is a : False
  a:[[   0    1    2    3]
   [   4    5    6 1234]
   [   8    9   10   11]]
  c:[[   0    1    2    3    4    5]
   [   6 1234    8    9   10   11]]
  • 深拷贝
    #深copy
    d = a.copy()
    print(d is a)

    d[1,1] = 12345

    print(d)
print(a)
    d is a: False
    d:[[    0     1     2     3]
     [    4 12345     6  1234]
     [    8     9    10    11]]
    a:[[   0    1    2    3]
     [   4    5    6 1234]
     [   8    9   10   11]]
  • 矩阵排序的相关知识
  data = np.sin(np.arange(20)).reshape(5,4)
  print(data)

  #按列取最大位置索引
  ind = data.argmax(axis=0) # axis = 0表示按列排序,1表示按行排序
  print(ind)

  data_max = data[ind,range(data.shape[1])]
  #行数
  print(data.shape[0])
  #列数
  print(data.shape[1])
  print(data_max)
data:[[ 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]]
   ind:[2 0 3 1] #第一个2是第一列的最大值0.98935825的位置2
   data.shape[0]:5 #表示行数
   data.shape[1]:4 #表示列数
   data_max:[0.98935825 0.84147098 0.99060736 0.6569866 ] #由数组中最大的几个数组成
  data_a = np.array([[4,3,5],[1,2,1]])
  print(data_a)

  #对每一行进行排序
  data_sort = np.sort(data_a,axis=1)
  print(data_sort)

  print(data_a)

  #对数组排序后的位置进行返回
  data_aa = np.array([4,2,1,3])
  data_bb = np.argsort(data_aa)

  #返回排序后的index
  print(data_bb)
  print(data_aa[data_bb])

  data_a:[[4 3 5]
        [1 2 1]]
  data_sort:[[3 4 5]
           [1 1 2]]
  data_aa:[4 2 1 3]
  data_bb:[2 1 3 0] #第一个2表示排名第一的应该是index为21
  data_aa[data_bb]:[1 2 3 4]
 #以data_aaa为单位,生成(3,5)的矩阵
  data_aaa = np.arange(0,40,10)
  data_bbb = np.tile(data_aaa,(3,5))

  print(data_bbb)
  data_bbb:
  [[ 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]]
  • 矩阵的最小、大值
 #最小值和最大值的求取
  z = 10*np.random.random((3,3))
  zmin,zmax = z.min(),z.max()
  print(zmin)
  print(zmax)
   zmin:1.1197570239299504
   zmax:9.79119437876471
  • 矩阵归一化
#矩阵归一化
z = 10*np.random.random((3,3))
print(z)
zmin,zmax = z.min(),z.max()

#归一化操作
z = (z-zmin)/(zmax-zmin)

print(z)
z:
[[8.09518796 4.6561416  1.49280322]
 [7.71101823 0.37948767 4.09183158]
 [7.49326444 1.88239213 3.17810515]]
z:#归一化后的矩阵
[[1.         0.55427943 0.14429222]
 [0.95020935 0.         0.48114154]
 [0.92198718 0.19478523 0.36271724]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值