我有两个不同的列表,我必须在python中应用numpy的np.dot函数我该怎么做?
list1=
array([[ nan, nan],
[ 0.000829, 0.000326],
[-0.000149, -0.00033 ],
...,
[-0.000757, -0.000737],
[-0.000795, -0.00068 ],
[-0.000788, -0.00069 ]])
list2=
array([[ nan, nan],
[ nan, nan],
[-0.000829, -0.000326],
...,
[ 0.000763, 0.000738],
[ 0.000757, 0.000737],
[ 0.000795, 0.00068 ]])
这是的两个单独列表
所以我想这样做:
np.dot([-0.000149, -0.00033 ], [-0.000829, -0.000326])
所以它就像
np.dot(list1[3], list2[3])
并且它继续从一个列表中选择一个索引,并从另一列表中选择另一个索引这应该返回一维数组,问题是数据,它在两个单独的列表中,所以我需要一个来自列表一的索引和一个来自另一个列表的索引,我知道这可以通过循环完成,但不确定怎么可能,
我希望现在已经清楚了
所以您的问题实际上是关于如何在列表中循环并在每个对应的对上调用np.dot
。这里有一种方法,使用列表理解和zip
:
>>> import numpy as np
>>> list1 = np.array([[1,2],[3,4]])
>>> list2 = list1.copy()
>>> list_of_results = [np.dot(a,b) for a,b in zip(list1, list2)]
>>> list_of_results
[5, 25]
如果你不熟悉列表理解,我建议你查一下。但你也可以用一个简单的for循环来完成:
assert list1.shape == list2.shape, "List shapes do not match"
results = []
for inner_list_index in range(list1.shape[0]):
a = list1[inner_list_index]
b = list2[inner_list_index]
res = np.dot(a,b)
results = results.append(res)
这可以减少到更少的行:
>>> assert list1.shape[0] == list2.shape[0]
>>> results = []
>>> for i in range(list1.shape[0]):
... results.append(np.dot(list1[i], list2[i]))
...
>>> results
[5, 25]
请注意,这两种方法都返回正常的list
,而不是numpyndarray
。这是因为追加到numpy数组通常不会太快。您可以使用np.append()
。或者,如果您再次需要将np.array()
作为np数组应用于结果。