Суммирование Numpy Массивы - PullRequest
       0

Суммирование Numpy Массивы

2 голосов
/ 12 февраля 2020

У меня есть один numpy массив вида:

np.Array1 = 

[
   ['2019-12-01' '0.03555' '0.03' '0.03' '0.03'],
   ['2019-12-02' '0.03' '0.03' '1' '0.03']
]

и второй:

np.Array2 = 

[
   array(['2019-12-01', '1', '1', '1', '1']),
   array(['2019-12-02', '1', '1', '1', '20'])
]

Есть ли способ для меня, так что сделайте что-то вроде:

Суммируйте каждый элемент, где npArray1.col1 = npArray2.col1 - то есть: когда даты совпадают, добавьте элемент за элементом (исключая дату)

'2019-12-01' = '2019-12-01' so [0.03555+1, 0.03+1, 0.03+1, 0.03+1]

Я получаю, что I Я полагаю, что это неправильно, изменяя типы в одном и том же массиве

Мы ценим любой совет относительно лучшего способа добавления значений на основе условных логик c.

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Вы могли бы сделать это, преобразовав ваши массивы в pandas фреймы данных с датой в качестве индекса и используя add:

import numpy as np
import pandas as pd

a1 = np.array( [['2019-12-01', '0.03555', '0.03', '0.03', '0.03'],
                ['2019-12-02', '0.03', '0.03', '1', '0.03']] )

a2 = np.array([['2019-12-01', '1', '1', '1', '1'],
               ['2019-12-02', '1', '1', '1', '20']])

# convert to dataframe and set the date as the index
# also convert to floats:
df1 = pd.DataFrame(a1).set_index(0).astype(float)
df2 = pd.DataFrame(a2).set_index(0).astype(float)


df1.add(df2, fill_value = 0)

Затем вы можете получить его обратно как массив numpy в исходном формате путем преобразования обратно в строку, сброса индекса и получения значений:

df1.add(df2, fill_value = 0).astype(str).reset_index().values
0 голосов
/ 12 февраля 2020

Это сработало для меня, и это не требует pandas:

import numpy as np

a1 = [
    np.array(['2019-12-01', '0.03555', '0.03', '0.03', '0.03']),
    np.array(['2019-12-02', '0.03', '0.03', '1', '0.03'])
]

a2 = [
    np.array(['2019-12-01', '1', '1', '1', '1']),
    np.array(['2019-12-02', '1', '1', '1', '20'])
]

def array_adder(A, B):
    C = []
    for outer, outer2 in zip(A, B):
        temp = []
        if len(outer) == len(outer2):
            for inner, inner2 in zip(outer, outer2):
                if len(temp) < 1:
                    temp.append(inner)
                else:
                    temp.append(float(inner) + float(inner2))
            C.append(temp)
        else:
            print('Arrays must have the same length..')
            break
    return C

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