codememo

부울 배열을 int 배열로 변환하는 방법

tipmemo 2023. 6. 17. 09:24
반응형

부울 배열을 int 배열로 변환하는 방법

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)

이것을 하는 재미있는 방법은

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

비루프 솔루션을 요청하셨겠지만, 제가 생각해 낼 수 있는 유일한 솔루션은 내부적으로 루프하는 것입니다.

map(int,y)

또는:

[i*1 for i in y]

또는:

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

언급URL : https://stackoverflow.com/questions/17506163/how-to-convert-a-boolean-array-to-an-int-array

반응형