Я пытаюсь проиндексировать некоторую матрицу, y
, а затем повторно проиндексировать этот результат с помощью некоторого булевого оператора и установить соответствующие элементы в y
на 0
. Ниже приведен фиктивный код, который я использую для проверки этой схемы индексирования.Установка значений массива Numpy при индексировании индексированного массива
x=np.zeros([5,4])+0.1;
y=x;
print(x)
m=np.array([0,2,3]);
y[0:4,m][y[0:4,m]<0.5]=0;
print(y)
Я не уверен, почему это не работает. Выход я хочу:
[[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]]
[[ 0. 0.1 0. 0. ]
[ 0. 0.1 0. 0. ]
[ 0. 0.1 0. 0. ]
[ 0. 0.1 0. 0. ]
[ 0.1 0.1 0.1 0.1]]
Но то, что я на самом деле получить:
[[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]]
[[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]
[ 0.1 0.1 0.1 0.1]]
Я уверен, что не хватает некоторых под капотом детали, объясняет, почему это не работает. Интересно, что если вы замените m
на :
, тогда работа будет выполнена. По какой-то причине выбор подмножества столбцов не позволяет мне присваивать нули.
Если кто-то может объяснить, что происходит, и помочь мне найти альтернативное решение (надеюсь, что это не связано с созданием временного массива numpy, так как мой фактический y
будет действительно огромным), я был бы очень признателен! Спасибо!
EDIT: y[0:4,:][y[0:4,:]<0.5]=0;
y[0:4,0:3][y[0:4,0:3]<0.5]=0;
т.д.
все работы, как и ожидалось. Кажется, проблема заключается в том, что вы индексируете список какого-то рода.
Не могли бы вы использовать некоторые случайные числа, а не все '0,1', что-то вроде' np.random.rand (5,4) 'в качестве ввода и показать нам ожидаемый результат? – Divakar
Первоначально я тестировался со всеми случайными числами, где я впервые столкнулся с проблемой. Я переключился на все «0,1» только потому, что был более воспроизводимым. –
Вы можете использовать 'np.random.seed (1234)' в начале, чтобы иметь воспроизводимые случайные числа. – Divakar