Нарезка массива N+1d Numpy с использованием массива Nd

Чтобы протестировать широкий диапазон параметров на выходе одного значения, я создаю многомерный массив для хранения значений. Однако, чтобы соответствующим образом обновить значения, мне нужно вычислить позиции, которые нужно обновить. Чтобы сделать это быстро, я хотел бы разбить N-мерный массив на N-1-мерный массив. Например, если бы у меня был 2D-массив: ''' arr = 1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

1 2 3 4 5 '''

и массив нарезки: ''' slicer = [2, 3, 1, 3, 5] ''' можно ли сделать что-то вроде этого:

обр[:слайсер] =

1 2 N N N

1 2 3 N N

1 N N N N

1 2 3 N N

1 2 3 4 5

Где N - это Нан или Нул или пусто.

Это возможно? Если нет, то как лучше/быстрее всего добиться такого же результата?

Чтобы было ясно, в моем идеальном мире я мог бы сделать что-то вроде этого:

обр[:срез] = обр[:срез] * обновление


person Henri Berger    schedule 09.05.2020    source источник
comment
Не могли бы вы привести пример, где срезается двумерный массив? Непонятно, что вам нужно в случае, если слайсер имеет более 1-D. Спасибо   -  person Ehsan    schedule 10.05.2020


Ответы (1)


Адаптация идеи, используемой в других SO, для заполнения массивов:

In [481]: arr = np.arange(1,6)*np.ones((5,1),int).astype(object)                                       
In [482]: arr                                                                                          
Out[482]: 
array([[1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5],
       [1, 2, 3, 4, 5]], dtype=object)
In [483]: mask = slicer[:,None]<=np.arange(5)                                                          
In [484]: mask                                                                                         
Out[484]: 
array([[False, False,  True,  True,  True],
       [False, False, False,  True,  True],
       [False,  True,  True,  True,  True],
       [False, False, False,  True,  True],
       [False, False, False, False, False]])
In [485]: arr[mask] = None                                                                             
In [486]: arr                                                                                          
Out[486]: 
array([[1, 2, None, None, None],
       [1, 2, 3, None, None],
       [1, None, None, None, None],
       [1, 2, 3, None, None],
       [1, 2, 3, 4, 5]], dtype=object)
person hpaulj    schedule 10.05.2020