суммирование Эйнштейна булевых массивов в NumPy - PullRequest
1 голос
/ 26 июня 2019

Суммирование по Эйнштейну (numpy.einsum) логических массивов в numpy не дает ожидаемых результатов. Функция Numpy.einsum выполняет логические операции над логическими массивами, что сомнительно в числовом контексте.

# summation of a boolean numpy array

x = numpy.array([True, False, True])

print(numpy.sum(x))
# output: 2

print(numpy.einsum('i->', x))
# output: True

Для логического массива x = [True, False, True] я ожидаю, что сумма x равна 2, и результат не должен зависеть от конкретного выбора функции. Однако numpy.sum дал 2, а numpy.einsum дал True.

Я не уверен, что я что-то неправильно понял или есть какая-то проблема с моим кодом. Любая помощь приветствуется.

1 Ответ

1 голос
/ 26 июня 2019

Разница в том, что sum преобразует boolean в целые числа перед суммированием, тогда как einsum пропускает этот шаг, за исключением случаев, когда вы его явно указали.

Попробуйте:

print(numpy.einsum('i->', x, dtype=int))
...