2013-09-05 1 views
1

У меня есть два Numpy массива:значения закатывается в Numpy массивы индексируются кусочком и две булевы массивы

a = np.arange(100*100).reshape(100,100) 
b = np.random.rand(100, 100) 

У меня также есть кортеж срезов, чтобы извлечь определенную часть массива:

slice_ = (slice(5, 10), slice(5, 10)) 

Я тогда набор логических индексов, чтобы выбрать определенную часть этого кусочка:

indices = b[slice_] > 0.5 

Если я хочу установить эти показатели на другое значение, я могу сделать это легко:

a[slice_][indices] = 42 

Однако, если я создаю еще один набор логических индексов для выбора определенной части индексированного массива:

high_indices = a[slice_][indices] > 700 

, а затем попробовать и установите значение массива в этих индексах:

a[slice_][indices][high_indices] = 42 # Doesn't do anything! 

Я подумал, что мне нужно и два массива индексов вместе, но они разные формы: indices имеет форму (5, 5) и high_indices имеет форму (12,).

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

ответ

3

Нарезка массива numpy возвращает представление, но булевское индексирование возвращает копию массива. Поэтому, когда вы впервые проиндексировали его с помощью логического индекса в a[slice_][indices][high_indices], вы получили копию, а значение 42 присваивается копии, а не массиву a. Вы можете решить проблему, связав логический индекс:

a[slice_][(a[slice_] > 700) & (b[slice_] > 0.5)] = 42 
Смежные вопросы