numpy 数组进行矩阵运算

在对numpy数组进行矩阵运算时,尤其要注意一维数组的维度对应问题。
结论:一维数组在进行矩阵运算时,会根据左乘右乘的矩阵维度自动判断自身维度,无需转置操作,若可以匹配,则直接运算;若匹配不了,则报错。

示例中,c为一维数组,其维度为(3,)。d为二维数组,维度为(1,3)。两者不同。

import numpy as np
from numpy.linalg import * 
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[1,2,4],[6,8,0]])
c = np.array([1,3,5])  #一维数组
d = np.array([[2,4,6]])  #注意c与d 的区别
print(a,a.shape)
print(b,b.shape)
print(c,c.shape)
print(d,d.shape)
a = 
 [[1 2 3]
 [4 5 6]
 [7 8 9]] (3, 3)
b = 
 [[1 2 4]
 [6 8 0]] (2, 3)
c = 
 [1 3 5] (3,)
d = 
 [[2 4 6]] (1, 3)

在对一维数组进行转置时,其shape不变。

print("a.T = \n",a.T,a.T.shape)
print("b.T = \n",b.T,b.T.shape)
print("c.T = \n",c.T,c.T.shape)  #一维数组转置后,shape无变化
print("d.T = \n",d.T,d.T.shape)
a.T = 
 [[1 4 7]
 [2 5 8]
 [3 6 9]] (3, 3)
b.T = 
 [[1 6]
 [2 8]
 [4 0]] (3, 2)
c.T = 
 [1 3 5] (3,)
d.T = 
 [[2]
 [4]
 [6]] (3, 1)

在矩阵乘法中要保证对应维度一致,一维数组可以自动匹配维度,无需转置操作
一维数组c可以左乘33矩阵,也可以右乘33矩阵,只要能匹配上,就能计算。

print(np.dot(a,c)) #可以计算,c的维度可以看做3*1
print(np.dot(c,a)) #可以计算,c的维度可以看做1*3
print(np.dot(b,c)) #可以计算,c的维度可以看做3*1
print(np.dot(c,b)) #无法计算,因为c的3个元素无法匹配b的第一个维度2
[22 49 76]
[48 57 66]
[27 30]
ValueError: shapes (3,) and (2,3) not aligned: 3 (dim 0) != 2 (dim 0)

二维数组d在进行矩阵乘法时,需要保证维度对应才行:

#print(np.dot(a,d)) #无法计算,d的维度是1*3,不匹配
print(np.dot(d,a)) #可以计算
#print(np.dot(b,d)) #无法计算
#print(np.dot(d,b)) #无法计算
ValueError: shapes (3,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)
[[60 72 84]]
ValueError: shapes (2,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)
ValueError: shapes (1,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值