numpy 什么是最快的方法来计算两个向量列表,并得到每个向量排列的点积?

vmjh9lq9  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(105)

我有一个向量列表,

list1 = [(x1,y1),(x2,y2), ... , (xn,yn)]
list2 = [(p1,q1), (p2,q2), ..., (pm,qm)]

目前,我正在做的是使用两个for循环来遍历两个列表,例如。

for i in range(len(list1)):
    for j in range(len(list2)):
        dot_prod = np.dot(list1[i],list2[j])

如果向量列表不长,这是可以的,但对于大型向量列表,我发现它会减慢我在优化循环中使用的函数。
有没有更快的方法来做到这一点,而不诉诸循环?

os8fio9y

os8fio9y1#

就这么简单:

import numpy as np

# assume inputs are np.array, convert first as necessary...
list1 = np.random.rand(10,2)
list2 = np.random.rand(10,2)

# compute all in one fast vectorized call
vectorized_dot_prod = list1 @ list2.T

# assert identical results (within numerical precision)
for i in range(len(list1)):
    for j in range(len(list2)):
        dot_prod = np.dot(list1[i],list2[j])
        assert np.allclose(vectorized_dot_prod[i][j], dot_prod)

相关问题