【发布时间】:2020-05-26 00:02:36
【问题描述】:
我有两个二维 numpy 数组 A 和 B 具有以下维度 (row, cols)
A.shape = (3000, 128) 和 B.shape = (5000, 128)
我希望将 A 的每一行与 B 的每一行取点积。例如;
np.dot(A[0], B[0])
np.dot(A[0], B[1]
np.dot(A[0], B[2]
. * .
. * .
. * .
np.dot(A[0], B[last]) # last row in B
np.dot(A[1], B[0]) # new row in A
np.dot(A[1], B[1])
np.dot(A[1], B[2])
. * .
. * .
. * .
np.dot(A[last], B[last]) # last operation
这个操作有特定的名称吗?
现在我有两个 for 循环,我猜这很慢。
all_dots = []
for i in range(0, len(A)):
for j in range(0, len(B)):
all_dots.append(np.dot(B[j], A[i]))
我正在寻找线性代数中的本机运算,以更有效地解决这个问题。
提前致谢!
【问题讨论】:
-
取B的转置矩阵乘积:
A @ B.T -
您的意思是
np.dot(A[0, :], B[0, :])等吗? -
这是否给出了所有组合?我认为会有更多的 np.dot(A, B.T) ? @担。我想为 A 中的每一行与 B 中的每一行执行点积。所以有很多组合。
-
@Dan
A[0,:]和A[0]几乎是一回事。 -
是的,我刚刚删除了它。对不起,我把自己弄糊涂了。我对做一个简单的矩阵产品的最初反应是正确的。用一个简单的玩具示例自己测试一下。另请注意,您可以使用
ravel来展平结果,但如果您将结果保留为矩阵,则矩阵的位置会告诉您该数字是哪两行的点积。
标签: python arrays numpy linear-algebra