首页 > 解决方案 > 如何在嵌套列表中做多个向量点积?

问题描述

我试图在嵌套列表中获取矢量点积例如:

A = np.array([[1,2,1,3],[2,1,2,3],[3,1,2,4]])

我试图得到:

B = [[15], [19, 23]]

其中 15 = np.dot(A[0],A[1]),

19 = np.dot(A[0],A[2]),

23 = np.dot(A[1],A[2])

B中的第一个inner_list是A[0]和A[1]的点积,

B 中的第二个 inner_list 是 A[0] 和 A[2] 的点积,A[1] 和 A[2] 的点积 我试图在 python 中编写一些循环但失败了如何在 Python 中获得 B?

标签: pythonnumpy

解决方案


这是一个与列表理解解决方案相结合的显式 for 循环:

In [1]: import numpy as np

In [2]: A = np.array([[1,2,1,3],[2,1,2,3],[3,1,2,4]])

In [5]: def get_dp(A):
   ...:     out = []
   ...:     for i, a in enumerate(A[1:]):
   ...:         out.append([np.dot(a, b) for b in A[:i+1]])
   ...:     return out

In [6]: get_dp(A)
Out[6]: [[15], [19, 23]]

说明:for 循环从第二个元素开始运行,列表推导从开始运行到当前迭代元素。


推荐阅读