NumPy - конвертировать индексы в bool в одну строку

У меня есть N-мерный массив bool NumPy b.

Он был преобразован в индексы True значения по i = np.nonzero(b).

Какой самый короткий однострочник для преобразования i вернуться к b.

Конечно, это можно сделать многострочным как:

b = np.zeros(b_shape, dtype = np.bool_)
b[i] = True

Очевидно, что однострочность может быть достигнута с помощью ;-конкатенация строк или другая магия кортежей / лямбда, или определение отдельной функции.

Но я действительно хочу найти встроенную функцию NumPy, например b = np.indices_to_bools(i, shape = b_shape)или придумать красивую суперпозицию нескольких встроенных функций. Так что это решение может быть включено как часть более сложного выражения.

Также я хочу, чтобы решение было таким же эффективным (с точки зрения ЦП / ОЗУ) или почти таким же эффективным, как эти две строки кода выше. Не просто неэффективный однострочник.

1 ответ

Это можно сделать, имейте в виду, что это не так оптимально, но для массивов из 100K элементов разница будет в порядке, если вы обменяетесь на один лайнер.

b = np.in1d(np.arange(b.size), np.ravel_multi_index(i, dims=b.shape))

Это значительно проще сделать для 1d массивов, приведенный выше код предназначен для N измерений.

Другие вопросы по тегам