【发布时间】:2020-02-25 21:54:15
【问题描述】:
我有一个矩阵A,形状为(N, D, 4)。首先我计算A转置,A_t。我想计算A_t 乘以A 的乘积。我希望得到的矩阵形状为(D, D),并且矩阵的乘积就像最后一个由 4 个分量组成的向量是一个数字。 (两个向量的点积是一个数。)
import numpy as np
N = 15
D = 98
A = np.random.random((N, D, 4))
A_t = np.zeros((D, N, 4))
for i in range(N):
A_t[:, i] = A[i]
S = np.zeros((D, D))
for i in range(D):
row = A_t[i]
for j in range(D):
col = A[:, j, :]
val = 0
for n in range(N):
val += np.matmul(row[n], col[n])
S[i][j] = val
print(A.shape)
print(A_t.shape)
print(S.shape)
【问题讨论】:
-
代码没有显示你想从矩阵中得到什么。您可以只使用
A_t = A.T进行转置。根本不需要循环。如果需要,显示带有小数组和for循环的具体示例。预期结果在这里很重要。 -
代码可能不会显示,但会说出来。我想得到 A.t * A 的乘积,考虑到 4 个分量的向量,就好像它们只是数字一样,所以我想要的结果矩阵是 DxD。这种矩阵的值将是由 4 个分量的两个向量的乘积得出的数字。
-
请在代码中显示这意味着什么。您当前的代码不构成 MCVE 或真正对讨论有任何帮助。如果必须的话,写一个
for循环。可以通过多种方式定义两个向量的乘积。虽然我假设您的意思是点积,但目前尚不清楚您打算如何组合这些元素以达到这一点。 -
好的,让我试着更清楚一些,如果我没有正确解释自己,我很抱歉。首先,我不能做 A.T 来找到 A 的转置,因为当我这样做时,尺寸不是我希望这个 3D 矩阵被转置的方式。我已经计算了我想要使用循环的矩阵,但我想知道是否有更快更好的方法来做到这一点。当尺寸变大时,这种方法太慢了。
-
感谢您发布循环。现在,您要 100% 清楚地知道您要做什么。我会尽快发布解决方案
标签: python numpy matrix multiplication