165

私は 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でこれを行うための簡単なコマンドはありますか、それともループを使用する必要がありますか?

4

6 に答える 6

209

Numpy 配列にはastypeメソッドがあります。するだけですy.astype(int)

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

>>> x
array([ True, False,  True], dtype=bool)
>>> x + [1, 2, 3]
array([2, 2, 4])
于 2013-07-06T19:10:26.343 に答える
66

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]
于 2013-07-06T19:15:04.767 に答える
31

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

y = x.astype(int)

numpy でない配列を使用していた場合は、リスト内包表記を使用できます。

y = [int(val) for val in x]
于 2013-07-06T19:17:14.027 に答える
19

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

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

それを行う正しい方法は次のとおりです。

yourArray.astype(int)

また

yourArray.astype(float)
于 2013-07-06T19:28:02.153 に答える
3

あなたが非ループの解決策を求めたことは知っていますが、私が思いつくことができる唯一の解決策はおそらく内部的にループするでしょう:

map(int,y)

また:

[i*1 for i in y]

また:

import numpy
y=numpy.array(y)
y*1
于 2013-07-06T19:20:51.953 に答える