问题描述
我正在使用列表向量 A 和 B。每个向量都有维度 n,但 A 和 B 的大小不同。对于 A 中的每个向量,我想计算它与 B 中所有向量的乘积。这是一个 n=2 的例子:
import numpy as np
A = np.random.rand(10,2)
B = np.random.rand(5,2)
for a in A:
PRODUCT = 1
for b in B:
PRODUCT = PRODUCT * np.matmul(a,b)
这符合我的要求,但我想知道是否有更快的方法可以避免使用嵌套的 for 循环。我的一个想法是通过使用 from itertools import product
来使用笛卡尔积,然后以某种方式在每次 i % len(B) == 0
迭代时进行这些计算。但我无法完成这项工作。
有改进的方法吗?或者嵌套的 for 循环是要走的路?
解决方法
可能有更简洁的方法来做到这一点,但它有效
import numpy as np
from itertools import product
A = np.random.rand(10,2)
B = np.random.rand(5,2)
one = []
two = []
curr = A[0]
PRODUCT = 1
for a,b in product(A,B):
if np.array_equal(a,curr) is False:
curr = a
PRODUCT = 1
PRODUCT = PRODUCT * np.matmul(a,b)
one.append(PRODUCT)
for a in A:
PRODUCT = 1
for b in B:
PRODUCT = PRODUCT * np.matmul(a,b)
two.append(PRODUCT)
if one == two:
print(True)
else:
print(False)
结果
True