numpy конкатенация по оси не работает с сгенерированными массивами - PullRequest
0 голосов
/ 04 августа 2020

когда мы объединяем по оси с 1d массивом и 2d массивом, мы можем создавать такие конкатенированные массивы. конкатенация не работает. Я думаю, проблема с генерацией массивов nan. В чем причина этого?

tmp = np.array([280, 362, 236, 239, 336, 347, 238, 327, 369, 238, 324, 264, 280,
       284, 347, 265, 303, 276, 261, 274, 353, 260, 280, 240, 312, 239,
       314, 319, 238, 324, 322, 238, 226, 294, 280, 276, 306, 265, 203,
       292, 261, 265, 284, 260, 184, 294, 312, 226, 284, 319, 238, 281,
       322, 180, 284, 294, 253, 282, 306, 194, 282, 292, 246, 279, 284,
       205])

tmp2 = np.array([7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7,
       7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7,
       6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6])

nans = [ np.ones(i)*np.nan for i in tmp2]
concat = np.c_[tmp,nans]

вывод

array([[280, array([nan, nan, nan, nan, nan, nan, nan])],
       [362, array([nan, nan, nan, nan, nan, nan, nan])],
       [236, array([nan, nan, nan, nan, nan, nan])],
       [239, array([nan, nan, nan, nan, nan, nan, nan])],
       [336, array([nan, nan, nan, nan, nan, nan, nan])],
       [347, array([nan, nan, nan, nan, nan, nan])],
       ....

ожидаемый результат

array([[280,nan, nan, nan, nan, nan, nan, nan],
       [362,nan, nan, nan, nan, nan, nan, nan],
       [236,nan, nan, nan, nan, nan, nan],
       [239,nan, nan, nan, nan, nan, nan, nan]
           ....
        ])

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Причина сбоя кода заключается в том, что Numpy не поддерживает "зубчатые" массивы (с различным количеством элементов в каждой строке).

Вы можете добавить столько же NaN столбцов, как вы sh (то же число в каждой строке), выполнение:

n = 5  # How many NaN columns to add
tmp = np.array([280, 362, 236, 239])
result = np.c_[tmp, np.full((tmp.size, n), np.nan)]

Результат:

array([[280.,  nan,  nan,  nan,  nan,  nan],
       [362.,  nan,  nan,  nan,  nan,  nan],
       [236.,  nan,  nan,  nan,  nan,  nan],
       [239.,  nan,  nan,  nan,  nan,  nan]])
0 голосов
/ 04 августа 2020

Я бы использовал что-то вроде этого, если производительность не так важна, все будет работать нормально.

output = []
for i, k in zip(tmp, tmp2):
       nans = np.ones(k) * np.nan
       output.append(np.concatenate([np.array([i]),nans]))

print(output)
...