Я использую Scilab и хочу преобразовать массив логических значений в массив целых чисел:
>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False, True, True], dtype=bool)
В Scilab я могу использовать:
>>> bool2s(y)
0. 0. 1. 1.
или даже просто умножьте его на 1:
>>> 1*y
0. 0. 1. 1.
Есть ли в Python простая команда для этого или мне придется использовать цикл?
Ответы:
У массивов Numpy есть
astype
метод. Просто сделайy.astype(int)
.Обратите внимание, что в этом может даже не быть необходимости, в зависимости от того, для чего вы используете массив. Bool будет автоматически преобразован в int во многих случаях, поэтому вы можете добавить его в массивы int без необходимости явно преобразовывать его:
источник
1*y
Метод работает в Numpy также:Если вы запрашиваете способ преобразования списков Python из логического в int, вы можете использовать
map
для этого:Или используя понимание списка:
источник
y = 1 if x else 0
это то же самое,y = 1 if x>0 else 0
и то же самое, что иif x: y = 1 ""NEXT LINE"" else: y = 0
.... как вы узнали эти уловки, я не видел этого в документации оператора if ?y=1 if x else 0
это не то же самое, что иy=1 if x>0 else 0
, поскольку последнее не принимает во внимание отрицательные числа. Это как раз то, что Python определяет какTrue
илиFalse
, все это в документации.Используя numpy, вы можете:
Если вы использовали массив без numpy, вы могли бы использовать понимание списка :
источник
В большинстве случаев преобразование не требуется:
Правильный способ сделать это:
или
источник
Я знаю, что вы просили о решениях, не связанных с циклом, но единственные решения, которые я могу придумать, вероятно, все равно зацикливаются внутри:
или:
или:
источник
Забавный способ сделать это
источник