gpt4 book ai didi

python - numpy.dot - 确保矩阵兼容性?

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:35 25 4
gpt4 key购买 nike

我有一个二维数组 X .

X[i]是具有 3 个值的一维数组。它的形状是:(3L,)

然后我有一个 3D 数组,g ,即 2x3x2。如果我打印出 g[j] 的形状,它是:(3L,2L)g[j][i] 的形状是(2L,)

现在我正在运行这样一个循环:

for j in range(len(g)):
for i in range(no_samples):
e = math.exp(1. + np.dot(X[i], g[j][i]) - np.dot(X[i],g[i_class][i]))

但是我得到以下错误:

  e = math.exp(1. + np.dot(X[i], g[j][i]) - np.dot(X[i],g[i_class][i]))
ValueError: matrices are not aligned

我想我明白问题所在,但不知道如何解决。我尝试转置 g[j][i]但这并没有什么不同。我尝试 reshape X[i]强制它成为(3L,1L) .我以为如果 X[i]是 3x1 和 g[j][i]是 1x2,那么矩阵是兼容的,我应该可以使用 np.dot .但我想我一定遗漏了一些东西。

正确的做法是什么?

最佳答案

问题是两个数组都只有一维且大小不等。这个问题有两种解决方案:

让我们从这里开始:

>>> x
array([3, 4, 5])
>>> x.shape
(3,) #Same shape as your array, but note that it is only 1D
>>> g
array([2, 3])

方式 1- reshape :

>>> np.dot(x.reshape(3,1), g.reshape(1,2))
array([[ 6, 9],
[ 8, 12],
[10, 15]])

方式 2- np.outer:

>>> np.outer(x,g)
array([[ 6, 9],
[ 8, 12],
[10, 15]])

当访问 numpy 数组而不是 g[i_class][i] 时,请使用 g[i_class,i]。此外,一维数组的转置不会更改数组。

最后,如果您按此所示运行脚本,您将收到一个额外的错误。 math.exp 不将 numpy 数组作为输入。要避免这种情况,您需要使用 np.exp 或将元素加在一起以返回单个标量。

关于python - numpy.dot - 确保矩阵兼容性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23461312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com