У меня есть Numpy массив так:Как эффективно использовать индексный массив в качестве маски, чтобы превратить массив numpy в булевский массив?
>>> I
array([[ 1., 0., 2., 1., 0.],
[ 0., 2., 1., 0., 2.]])
и массив А как это:
>>> A = np.ones((2,5,3))
Я хотел бы получить следующую матрицу:
>>> result
array([[[ False, False, True],
[ False, True, True],
[ False, False, False],
[ False, False, True],
[ False, True, True]],
[[ False, True, True],
[ False, False, False],
[ False, False, True],
[ False, True, True],
[ False, False, False]]], dtype=bool)
Это лучше пояснить на примере: I[0,0] = 1 -> result[0,0,:2] = False
и result[1,1,2:] = True
I[1,0] = 0 -> result[1,1,0] = False
и result[1,1,1:] = True
Вот моя текущая реализация (правильный):
result = np.empty((A.shape[0], A.shape[1], A.shape[2]))
r = np.arange(A.shape[2])
for i in xrange(A.shape[0]):
result[i] = r > np.vstack(I[i])
print result.astype(np.bool)
Есть ли способ, чтобы реализовать в более быстрый способ (избегая цикл)?
Спасибо!
Я попытался запустить ваш код, но он не работает для меня. Не могли бы вы пересмотреть свой вопрос и сделать его более понятным? – mrcl
Извините, я виноват. A - матрица (2,5,3). Я также добавил печать с преобразованием bool – Rowandish