在 Python 中乘以向量时避免嵌套 for 循环

问题描述

我正在使用列表向量 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...