2017-01-26 2 views
4

Итак, у меня есть 2D-массив numpy (256,256), содержащий значения от 0 до 10, что по существу является изображением. Мне нужно удалить значения 0 и установить их в NaN, чтобы я мог построить массив с использованием определенной библиотеки (APLpy). Однако всякий раз, когда я пытаюсь изменить все значения 0, некоторые из других значений меняются, в некоторых случаях до 100 раз их первоначального значения (не знаю, почему).Значения, изменяемые в массиве numpy

код я использую:

for index, value in np.ndenumerate(tex_data): 
    if value == 0: 
     tex_data[index] = 'NaN' 

где tex_data является массив данных, из которой нужно удалить нули. К сожалению, я не могу просто использовать маску для значений, которые мне не нужны, поскольку APLpy не будет использовать маскированные массивы, насколько я могу судить.

В любом случае я могу установить значения 0 в NaN без изменения других значений в массиве?

+0

Вы уверены, что это основано на вашей петле? Я пробовал для себя и не наблюдал этого эффекта. – Lagerbaer

+0

Да, я действительно не знаю, что происходит –

+0

Можете ли вы предоставить пример кода и данных? Если мы не можем реплицировать, то мы не можем помочь O_O – Lagerbaer

ответ

4

Используйте причудливую индексацию. Пример:

tex_data[tex_data==0] = np.nan 

Я не знаю, почему ваш исходный код не срабатывал. Это выглядит правильно для меня, хотя и ужасно неэффективно.

+0

Примечание: 'ndenumerate' выполняет элементную итерацию. Индекс будет 2D-индексом, значением будет этот элемент индексов. – Lagerbaer

+0

Upvote для фантазии индексирования. Мантра с numpy: избегайте петель всякий раз, когда вы можете! – Lagerbaer

+0

Пробовал это и все еще производит ту же проблему? –

0

Использование правил поплавка,

tex_data/tex_data*tex_data

сделать работу здесь также.