как я могу применить функцию np.dot к двум спискам в numpy pandas - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть два разных списка, и я должен применить функцию np.dot numpy в python, как я могу это сделать?

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])

ион продолжает выбирать один индекс из одного списка и один индекс из другого списка, и он должен возвращать одномерный массив, проблема заключается в данных, которые находятся в двух отдельных списках, поэтому мне нужен один индекс из списка один и один индекс издругой список, я знаю, что это можно сделать через цикл, но не уверен, как это возможно,

я надеюсь, что теперь все ясно

1 Ответ

0 голосов
/ 22 ноября 2018

Итак, ваш вопрос на самом деле о том, как перебрать списки и вызвать 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, а не NumPy ndarray.Это связано с тем, что добавление в numy-массивы обычно происходит не слишком быстро.Вы можете использовать np.append() вместо этого.Или просто примените np.array() к результату, если вам снова понадобится массив np.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...