我试图在嵌套列表中获得矢量点积 例如:
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?
答案 0 :(得分:1)
这是一个显式的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循环从第二个元素开始运行,列表推导从头开始运行到当前迭代的元素。
答案 1 :(得分:0)
一个迭代器类,它吐出与B相同的元素。
如果需要完整列表,可以list(iter_dotprod(A))
示例:
class iter_dotprod:
def __init__(self, nested_arr):
self.nested_arr = nested_arr
self.hist = []
def __iter__(self):
self.n = 0
return self
def __next__(self):
if self.n > len(self.nested_arr) -2:
raise StopIteration
res = np.dot(self.nested_arr[self.n], self.nested_arr[self.n+1])
self.hist.append(res)
self.n += 1
return self.hist
A = np.array([[1,2,1,3],[2,1,2,3],[3,1,2,4]])
tt = iter_dotprod(A)
for b in iter_dotprod(A):
print(b)