4

如何在 python 中获取 2 个列向量的内积numpy

下面的代码不起作用

import numpy as np
x = np.array([[1], [2]])
np.inner(x, x)

它回来了

array([[1, 2],
       [2, 4]])`

代替5

4

4 回答 4

7

一个维度为 2x1(2 行,1 列)的向量与另一个维度为 2x1(2 行,1 列)的向量的内积是一个维度为 2x2(2 行,2 列)的矩阵。当你取任何张量的内积时,最里面的维度必须匹配(在这种情况下为 1),结果是一个尺寸与外部匹配的张量,即;2x1 * 1x2 = 2x2。

您想要做的是转置两者,这样当您相乘时,尺寸为 1x2 * 2x1 = 1x1。

更一般地说,将任何具有维度NxM的事物乘以具有维度的事物MxK,得到具有维度的事物NxK。请注意,内部尺寸都必须是M。有关更多信息,请查看您的矩阵乘法规则

np.inner函数将自动转置第二个参数,因此当你传入两个 2x1 时,你会得到一个 2x2,但如果你传入两个 1x2,你会得到一个 1x1。

试试这个:

import numpy as np
x = np.array([[1], [2]])
np.inner(np.transpose(x), np.transpose(x))

或者简单地将您的 x 定义为最初的行向量。

import numpy as np
x = np.array([1,2])
np.inner(x, x)
于 2017-06-30T15:54:18.163 回答
0

我想你的意思是:

x= np.array([1,2])

为了得到 5 作为输出,如果你想在其上应用np.inner ,你的向量需要是 1xN 而不是 Nx1

于 2017-06-30T15:57:19.880 回答
0

尝试以下它会工作

np.dot(np.transpose(a),a))
于 2017-09-24T16:32:46.247 回答
0

确保 col_vector 具有形状 (N,1) 其中 N 是元素的数量

然后简单地将一比一的乘法结果相加

np.sum(col_vector*col_vector)

于 2019-11-10T11:19:58.117 回答