web-dev-qa-db-ja.com

ブール配列を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.  

Pythonでこれのための簡単なコマンドがありますか、それともループを使用する必要がありますか?

92
Kwolf

Numpy配列にはastypeメソッドがあります。 y.astype(int)を実行してください。

配列の使用目的によっては、これを行う必要さえない場合があることに注意してください。 Boolは多くの場合intに自動昇格されるため、明示的に変換せずにint配列に追加できます。

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

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]
39
Sukrit Kalra

Numpyを使用すると、次のことができます。

y = x.astype(int)

Numpy以外の配列を使用している場合、 list comprehension を使用できます。

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

ほとんどの場合、変換は必要ありません。

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

正しい方法は次のとおりです。

yourArray.astype(int)

または

yourArray.astype(float)
10
Gioelelm

あなたが非ループソリューションを要求したことは知っていますが、おそらく内部でループする可能性がある唯一のソリューションはとにかく内部でループします:

map(int,y)

または:

[i*1 for i in y]

または:

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