点使用列表和数组,有什么区别

2021-06-13 13:50:24 发布

您现在位置:Python中文网/ 问答频道 /正文

当使用{}执行两个类似矩阵{}的相乘时,它给出了一个结果,而实际上它应该给出一个形状和尺寸误差,就像两个类似数组相乘时一样。引擎盖下发生了什么?你知道吗

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)

2条回答
网友
1楼 ·

根据文件here

  • 如果ab都是1-D数组,则它是向量的内积(没有复共轭)。

  • 如果ab都是2-D数组,则它是矩阵乘法,但使用matmula @ b是首选。

情况1:ab1-D数组,因此结果是1*6+2*3=12。你知道吗

例2:ab2-D数组,所以我们将对这两个数组进行矩阵积。它引发ValueError,因为a的最后一个维度与b的第二个到最后一个维度的大小不同。你知道吗

网友
2楼 ·

加上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的行为方式的原因。你知道吗

相关问题