2024-04-20 04:58:55 发布
网友
当使用{}执行两个类似矩阵{}的相乘时,它给出了一个结果,而实际上它应该给出一个形状和尺寸误差,就像两个类似数组相乘时一样。引擎盖下发生了什么?你知道吗
a=[1,2] b=[6,3] result=[np.dot(b, a)] print(result)
O/P= 12
但是
a=[[1,2]] b=[[6,3]] result=[np.dot(b, a)] print(result)
错误:
O/P= ValueError: shapes (1,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
根据文件here
如果a和b都是1-D数组,则它是向量的内积(没有复共轭)。
a
b
1-D
如果a和b都是2-D数组,则它是矩阵乘法,但使用matmul或a @ b是首选。
2-D
matmul
a @ b
情况1:a和b是1-D数组,因此结果是1*6+2*3=12。你知道吗
1*6+2*3=12
例2:a和b是2-D数组,所以我们将对这两个数组进行矩阵积。它引发ValueError,因为a的最后一个维度与b的第二个到最后一个维度的大小不同。你知道吗
ValueError
加上Anubhav Singh的正确答案,注意行向量与列向量的矩阵积返回一个1乘1的矩阵,其唯一条目是两个向量的点积,因此在本例中
In [32]: a = np.array([[1,2]]) In [33]: b = np.array([[6,3]]) In [34]: a @ b.T Out[34]: array([[12]]) In [35]: np.dot(a, b.T) Out[35]: array([[12]]) In [36]: np.dot(a[0], b[0]) Out[36]: 12
这就是np.dot的行为方式的原因。你知道吗
np.dot
根据文件here
如果
a
和b
都是1-D
数组,则它是向量的内积(没有复共轭)。如果
a
和b
都是2-D
数组,则它是矩阵乘法,但使用matmul
或a @ b
是首选。情况1:
a
和b
是1-D
数组,因此结果是1*6+2*3=12
。你知道吗例2:
a
和b
是2-D
数组,所以我们将对这两个数组进行矩阵积。它引发ValueError
,因为a
的最后一个维度与b
的第二个到最后一个维度的大小不同。你知道吗加上Anubhav Singh的正确答案,注意行向量与列向量的矩阵积返回一个1乘1的矩阵,其唯一条目是两个向量的点积,因此在本例中
这就是
np.dot
的行为方式的原因。你知道吗相关问题 更多 >
编程相关推荐