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

问题描述 投票:0回答:3

示例:

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) x (1x3) 的矩阵时,这怎么可能?它应该是一个 3x1 矩阵。

python numpy matrix-multiplication
3个回答
3
投票

y
不是 1x3 矩阵,而是一维向量(如果有疑问,请检查
y.size
)。如果您查看文档,您可以找到

如果 a 是 N 维数组,b 是一维数组,则它是 a 和 b 最后一个轴的和积。

这就是为什么它返回两个元素的一维向量。


0
投票

dot
产品中,左侧数组最后一个维度的长度应与右侧数组倒数第二个维度的长度相同。

您可以

transpose
y
,如果这对您的计算有意义的话:

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

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

输出:

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

或者转换回一维:

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

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

输出:

array([ 6., 15.])


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.