numpy 为什么给我的矩阵乘法之间的2d和1d数组这个结果?

ndh0cuux  于 2023-10-19  发布在  其他
关注(0)|答案(3)|浏览(134)

范例:

import numpy as np

x = np.array([[1., 2., 3.], [4., 5., 6.]])
y = np.ones(3)

np.dot(x , y)

测试结果:

array([ 6., 15.])

当我有一个(2x3)乘(1x3)的矩阵时,这怎么可能呢?它应该是一个3x1矩阵。

mftmpeh8

mftmpeh81#

y不是一个1x 3矩阵,而是一个一维向量(如果有疑问,请检查y.size)。如果你看一下documentation,你会发现
如果a是N-D数组,B是1-D数组,则它是a和B在最后一个轴上的和积。
这就是为什么它返回一个包含两个元素的一维向量。

py49o6xq

py49o6xq2#

dot乘积中,左侧数组的最后一个维度的长度应该与右侧数组的倒数第二个维度的长度相同。
你可以transposey,如果这对你的计算有意义的话:

y = np.ones(shape=(1, 3))

out = np.dot(x , y.T)

输出量:

array([[ 6.],
       [15.]])

或者转换回1D:

out = np.dot(x , y[0])

# or
out = np.dot(x , y.squeeze())

输出:array([ 6., 15.])

zrfyljdw

zrfyljdw3#

你在这里取一个2D数组和一个1D数组(或向量)的点积。在numpy中,行向量和列向量之间没有区别。因此,在您的示例中,该向量被视为列向量。更多信息请参阅此处。

相关问题