求 numpy 中子数组的点积

发布于 2024-11-14 21:56:15 字数 154 浏览 4 评论 0原文

在 numpy 中,numpy.dot() 函数可用于计算两个二维数组的矩阵乘积。我有两个 3D 数组 X 和 Y(比如说),我想计算矩阵 Z,其中 Z[i] == numpy.dot(X[i], Y[i])对于所有i。这可以非迭代地完成吗?

In numpy, the numpy.dot() function can be used to calculate the matrix product of two 2D arrays. I have two 3D arrays X and Y (say), and I'd like to calculate the matrix Z where Z[i] == numpy.dot(X[i], Y[i]) for all i. Is this possible to do non-iteratively?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尛丟丟 2024-11-21 21:56:15

怎么样:

from numpy.core.umath_tests import inner1d
Z = inner1d(X,Y)

例如:

X = np.random.normal(size=(10,5))
Y = np.random.normal(size=(10,5))
Z1 = inner1d(X,Y)
Z2 = [np.dot(X[k],Y[k]) for k in range(10)]
print np.allclose(Z1,Z2)

返回 True

Edit 更正,因为我没有看到问题的 3D 部分

from numpy.core.umath_tests import matrix_multiply
X = np.random.normal(size=(10,5,3))
Y = np.random.normal(size=(10,3,5))
Z1 = matrix_multiply(X,Y)
Z2 = np.array([np.dot(X[k],Y[k]) for k in range(10)])
np.allclose(Z1,Z2)  # <== returns True

这有效是因为(如文档字符串所述),matrix_multiply提供

matrix_multiply(x1, x2[, out]) 矩阵

最后两个维度的乘法

How about:

from numpy.core.umath_tests import inner1d
Z = inner1d(X,Y)

For example:

X = np.random.normal(size=(10,5))
Y = np.random.normal(size=(10,5))
Z1 = inner1d(X,Y)
Z2 = [np.dot(X[k],Y[k]) for k in range(10)]
print np.allclose(Z1,Z2)

returns True

Edit Correction since I didn't see the 3D part of the question

from numpy.core.umath_tests import matrix_multiply
X = np.random.normal(size=(10,5,3))
Y = np.random.normal(size=(10,3,5))
Z1 = matrix_multiply(X,Y)
Z2 = np.array([np.dot(X[k],Y[k]) for k in range(10)])
np.allclose(Z1,Z2)  # <== returns True

This works because (as the docstring states), matrix_multiplyprovides

matrix_multiply(x1, x2[, out]) matrix

multiplication on last two dimensions

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文