Numpy: Как напрямую назначить подмассив из значений, если эти значения разделены шагом - PullRequest
0 голосов
/ 27 марта 2020

У меня есть 2 глобальных массива "tab1" и "tab2" с размерами соответственно равными 21x21 и 17x17.

Я хотел бы назначить блок "tab1 «(индексируется [15:20,0:7]) блоком« tab2 », индексированным [7:17:2,0:7] (то есть с шагом между элементами 1-го измерения массива): я пробовал с таким синтаксисом:

tab1[15:20,0:7] = tab2[7:17:2,0:7]

К сожалению, это не работает, кажется, что только «диагональные» (я имею в виду один за другим) элементы 15:20 учитываются после значений «tab2» вдоль [7:17:2].

Есть ли способ назначить подмассив "tab1" с другим подмассивом "tab2", состоящим из индексов с шаговыми значениями?

Если кто-то может увидеть, что не так или предложить другой метод, это будет будьте хороши.

ОБНОВЛЕНИЕ 1: действительно, из моих последних тестов, это кажется хорошим, но это также то же самое для назначения блока [15:20,15:20]:

tab1[15:20,15:20] = tab2[7:17:2,7:17:2]  

??

ОТВЕТ: кажется, хорошо и для этого назначения блока, извините

1 Ответ

1 голос
/ 27 марта 2020

Назначение работает, как я ожидаю.

In [1]: arr = np.ones((20,10),int)                                                             

Два блока имеют одинаковую форму:

In [2]: arr[15:20, 0:7].shape                                                                  
Out[2]: (5, 7)
In [3]: arr[7:17:2, 0:7].shape                                                                 
Out[3]: (5, 7)

и присваивают что-то интересное, выглядит правильно:

In [4]: arr2 = np.arange(200).reshape(20,10)                                                   
In [5]: arr[15:20, 0:7] = arr2[7:17:2, 0:7]                                                    
In [6]: arr                                                                                    
Out[6]: 
array([[  1,   1,   1,   1,   1,   1,   1,   1,   1,   1],        
        ...
       [  1,   1,   1,   1,   1,   1,   1,   1,   1,   1],
       [ 70,  71,  72,  73,  74,  75,  76,   1,   1,   1],
       [ 90,  91,  92,  93,  94,  95,  96,   1,   1,   1],
       [110, 111, 112, 113, 114, 115, 116,   1,   1,   1],
       [130, 131, 132, 133, 134, 135, 136,   1,   1,   1],
       [150, 151, 152, 153, 154, 155, 156,   1,   1,   1]])

Я вижу (5,7 ) блок значений из arr2, пропуская строки типа [80, 100, ...]

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