[python] 부울 배열을 정수 배열로 변환하는 방법

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.  

파이썬에 이것에 대한 간단한 명령이 있습니까, 아니면 루프를 사용해야합니까?



답변

Numpy 배열에는 astype메서드가 있습니다. 그냥하세요 y.astype(int).

배열을 사용하는 용도에 따라이 작업을 수행 할 필요가 없을 수도 있습니다. Bool은 많은 경우에 int로 자동 승격되므로 명시 적으로 변환하지 않고도 int 배열에 추가 할 수 있습니다.

>>> x
array([ True, False,  True], dtype=bool)
>>> x + [1, 2, 3]
array([2, 2, 4])


답변

1*y방법은 Numpy에서도 작동합니다.

>>> import numpy as np
>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False,  True,  True], dtype=bool)
>>> 1*y                      # Method 1
array([0, 0, 1, 1])
>>> y.astype(int)            # Method 2
array([0, 0, 1, 1]) 

Python 목록을 Boolean에서 int로 변환하는 방법을 요청하는 경우 다음을 사용 map하여 수행 할 수 있습니다 .

>>> testList = [False, False,  True,  True]
>>> map(lambda x: 1 if x else 0, testList)
[0, 0, 1, 1]
>>> map(int, testList)
[0, 0, 1, 1]

또는 목록 이해력 사용 :

>>> testList
[False, False, True, True]
>>> [int(elem) for elem in testList]
[0, 0, 1, 1]


답변

numpy를 사용하여 다음을 수행 할 수 있습니다.

y = x.astype(int)

numpy가 아닌 배열을 사용하는 경우 목록 이해를 사용할 수 있습니다 .

y = [int(val) for val in x]


답변

대부분의 경우 변환이 필요하지 않습니다.

>>>array([True,True,False,False]) + array([1,2,3,4])
array([2, 3, 3, 4])

이를 수행하는 올바른 방법은 다음과 같습니다.

yourArray.astype(int)

또는

yourArray.astype(float)


답변

비 루핑 솔루션을 요청한 것을 알고 있지만 내가 생각 해낼 수있는 유일한 솔루션은 어쨌든 내부적으로 루프 할 수 있습니다.

map(int,y)

또는:

[i*1 for i in y]

또는:

import numpy
y=numpy.array(y)
y*1


답변

이렇게하는 재미있는 방법은

>>> np.array([True, False, False]) + 0
np.array([1, 0, 0])


답변