Numpy Матрица вычитания разных размеров - PullRequest
0 голосов
/ 10 апреля 2020

В настоящее время у меня есть массив размеров 5D numpy 40 x 3 x 3 x 5 x 1000, где размеры помечены как axbx c xdxe соответственно.

У меня есть другой массив 2D numpy измерений 3 x 1000, где размеры помечены как bxe соответственно.

I sh для вычитания 5D массива из 2D массива.

Один из способов, о котором я думал, - это расширить 2D в массив 5D (поскольку массив 2D не изменяется для всех комбинаций трех других измерений). Я не уверен, какой метод массива / numpy функцию я могу использовать для этого.

Я склонен начать терять с манипуляциями с массивом nD. Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 10 апреля 2020
In [217]: a,b,c,d,e = 2,3,4,5,6                                                                        
In [218]: A = np.ones((a,b,c,d,e),int); B = np.ones((b,e),int)                                         
In [219]: A.shape                                                                                      
Out[219]: (2, 3, 4, 5, 6)
In [220]: B.shape                                                                                      
Out[220]: (3, 6)
In [221]: B[None,:,None,None,:].shape   # could also use reshape()                                                               
Out[221]: (1, 3, 1, 1, 6)
In [222]: C = B[None,:,None,None,:]-A                                                                  
In [223]: C.shape                                                                                      
Out[223]: (2, 3, 4, 5, 6)

Первый None не обязателен; numpy добавит его по мере необходимости, но как человек это может помочь увидеть его.

1 голос
/ 10 апреля 2020

IIU C, предположим, что ваши массивы a и b:

np.swapaxes(np.swapaxes(a, 1, 3) - b, 1, 3)
...