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 измерений.