python中数组矩阵的运算、切片、组合及相互转换

一、数组的运算

import numpy as np

#创建数组
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
a=[[1,2,3]
   [4,5,6]
   [7,8,9]]
b=np.array([[9,8,7],[6,5,4],[3,2,1]])
b=[[9,8,7]
   [6,5,4]
   [3,2,1]]
#a+b对应位置相加
c=a+b
c=[[10 10 10]
 [10 10 10]
 [10 10 10]]
#a*const数组每个元素乘以该常数
c=a*3
c=[[ 3  6  9]
 [12 15 18]
 [21 24 27]]
#a*b数组中每个对应元素相乘 
c=a*b
c=[[ 9 16 21]
 [24 25 24]
 [21 16  9]]
#数组的点乘相当于矩阵相乘
c=a*b
c=[[ 30  24  18]
 [ 84  69  54]
 [138 114  90]]
#改变数组的格式
c=a.reshape(1,9)
c=[[1 2 3 4 5 6 7 8 9]]
#改变数组的索引值,二维相当于求转置,三维变为(y,x,z)
c=np.transpose(a)
c=[[1 4 7]
   [2 5 8]
   [3 6 9]]

二、矩阵的运算

#数组转化为矩阵
a=np.mat(a)
b=np.mat(b)
#矩阵的乘法* 、np.dot()结果一致,按矩阵运算规则
#也可以reshape
#矩阵的转置
c=a.T
c=[[1 4 7]
 [2 5 8]
 [3 6 9]]
#矩阵的共轭转置
 c=a.H
 c=[[1 4 7]
 [2 5 8]
 [3 6 9]]
#矩阵的逆
c=a.I
c=[[ 3.15251974e+15 -6.30503948e+15  3.15251974e+15]
 [-6.30503948e+15  1.26100790e+16 -6.30503948e+15]
 [ 3.15251974e+15 -6.30503948e+15  3.15251974e+15]]
c=np.linalg.inv(a)
c=[[ 3.15251974e+15 -6.30503948e+15  3.15251974e+15]
 [-6.30503948e+15  1.26100790e+16 -6.30503948e+15]
 [ 3.15251974e+15 -6.30503948e+15  3.15251974e+15]]

三、相互转化

#数组转矩阵
array_to_matrix = np.mat(my_array)
#矩阵转数组
matrix_to_array = np.array(my_matrix)

四、切片

#a为三维举证
a=[[[9, 8, 7], [6, 5, 4], [3, 2, 1]], [[19, 18, 17], [16, 15, 14], [13, 12, 11]], [[29, 28, 27], [26, 25, 24], [23, 22, 21]]]

a[1,:]=[[19 18 17]
 [16 15 14]
 [13 12 11]]
a[1,1,:]=[16 15 14]
a[1,1,1]=15
a[:1:]=[[[9 8 7]
  [6 5 4]
  [3 2 1]]]
a[:,1:]=[[[ 6  5  4]
  [ 3  2  1]]
  [[16 15 14]
  [13 12 11]]
  [[26 25 24]
  [23 22 21]]]
a[:,1,1]=[ 5 15 25]
a[0:2,0:2,:]=[[[ 9  8  7]
  [ 6  5  4]]
  [[19 18 17]
  [16 15 14]]]
#每隔一个取一个
a[::2]=
[[[9, 8, 7], [6, 5, 4], [3, 2, 1]],
 [[29, 28, 27], [26, 25, 24], [23, 22, 21]]]
#从第二个开始隔一个取一个
a[1::2]=
[[[19, 18, 17], [16, 15, 14], [13, 12, 11]]]

五、组合

a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.array([0,0,0])
#水平组合
c=np.hstack((a,b.reshape(3,1)))
c=[[1 2 3 0]
   [4 5 6 0]
   [7 8 9 0]]
#垂直组合
b=np.vstack((a,b))
c=[[1 2 3]
   [4 5 6]
   [7 8 9]
   [0 0 0]]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BTWBB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值