为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 numpy pandas 的两个列表上应用 np.dot 函数

如何在 numpy pandas 的两个列表上应用 np.dot 函数

森栏 2021-08-24 18:09:12
我有两个不同的列表,我必须在 python 中应用 numpy 的 np.dot 函数,我该怎么做?列表1=array([[      nan,       nan],       [ 0.000829,  0.000326],       [-0.000149, -0.00033 ],       ...,       [-0.000757, -0.000737],       [-0.000795, -0.00068 ],       [-0.000788, -0.00069 ]])列表 2 =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])它继续从一个列表中选择一个索引,从另一个列表中选择一个索引,这应该返回一维数组,问题是数据,它在两个单独的列表中,所以我需要一个列表中的一个索引和一个索引另一个列表,我知道它可以通过循环完成,但不确定这怎么可能,我希望现在清楚了
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

所以你的问题实际上是关于如何遍历列表并调用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]

请注意,这两种方法都返回一个 normal list,而不是一个 numpy ndarray。这是因为附加到 numpy 数组通常不会太快。你可以用np.append()。或者np.array(),如果您再次需要它作为 np 数组,则仅适用于结果。


查看完整回答
反对 回复 2021-08-24
  • 1 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信