Numpy: Можно ли рассредоточить многомерный массив неравных размеров? - PullRequest
0 голосов
/ 01 мая 2018

Приносим свои извинения за отсутствие работающего примера, так как достаточно сложно его привести.

У меня есть многомерный массив, но размеры имеют неодинаковый размер. Например:

>>> print results_rmse.shape
(6,)
>>> for i in range(len(results_rmse)):
...    print(results_rmse[i].shape)
...
(224, 5)
(222, 5)
(224, 5)
(224, 5)
(224, 5)
(224, 5)

Я хотел бы найти минимум окончательного измерения всех подмассивов.


Например, если бы они были все одного размера (6,224,5), то я бы сделал min(results_rmse[:,:,4].ravel()).

1 Ответ

0 голосов
/ 01 мая 2018

С массивом 3d:

In [205]: arr = np.arange(24).reshape(4,3,2)
In [206]: arr[:,:,0]
Out[206]: 
array([[ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16],
       [18, 20, 22]])
In [207]: arr[:,:,0].ravel()
Out[207]: array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22])

Теперь создайте рваный массив

In [208]: arr2 = np.empty(4, object)
In [209]: arr2[:] = list(arr)
In [212]: arr2[1] = arr2[1][:2,:]
In [214]: [x.shape for x in arr2]
Out[214]: [(3, 2), (2, 2), (3, 2), (3, 2)]

Рассматривать его как список массивов:

In [215]: [x[:,0] for x in arr2]
Out[215]: [array([0, 2, 4]), array([6, 8]), array([12, 14, 16]), array([18, 20, 22])]
In [216]: np.concatenate(_)
Out[216]: array([ 0,  2,  4,  6,  8, 12, 14, 16, 18, 20, 22])

(как и первое, кроме пропущенных 10)

Обратите внимание, что Out[215] имеет разную длину, поэтому concatenate - единственное, что присоединится к ним, а не np.array(Out[215]).

Мы также можем объединить перед выбором:

In [217]: np.concatenate(arr2, axis=0)
Out[217]: 
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [12, 13],
       [14, 15],
       [16, 17],
       [18, 19],
       [20, 21],
       [22, 23]])
In [218]: np.concatenate(arr2, axis=0)[:,0]
Out[218]: array([ 0,  2,  4,  6,  8, 12, 14, 16, 18, 20, 22])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...