2013-07-06 9 views
62

にブール配列に変換するために、私はScilabのを使用して、整数の配列にブール値の配列を変換したい:私は使用することができるのScilabでどのようにint配列

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

>>> bool2s(y) 
0. 0. 1. 1. 

あるいは単に1を掛け:

>>> 1*y 
0. 0. 1. 1. 

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

+0

boolean配列をscipy、numpyなどの整数に変換する方法を求めていますか? –

+0

コードを書式設定する別の方法があります。あなたはblockquoteを使う必要はありません。これはインデントで行い、質問エディタの上の中括弧ボタンはあなたのために行います。見てみな。 – Marcin

+0

Sukrit、scipy、numpyなどのPythonモジュールパッケージを使用する必要があるかどうかは気にしません。 – Kwolf

答えて

78

ナンシーアレイはastypeメソッドを持っています。ちょうどy.astype(int)を実行してください。

アレイの使用目的に応じて、これを行う必要はない場合もあります。ブール値は、多くの場合、intにautopromotedされますので、あなたはそれを明示的に変換することなく配列をintにそれを追加することができます

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

はい、私はx * 1とタイプすることもできますし、シラバスと同じことをします.... *今のダンボールのように感じます* .. 皆さんありがとうございました!私の質問では、さまざまな回答を得て、それを行うさまざまな方法をすべて見ているのが本当に好きでした。本当にPythonに関して私の心を開いた。 – Kwolf

22

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]) 

あなたがいる場合あなたがそれを行うにはmapを使用することができ、intにブールからPythonのリストを変換する方法を求めて:

>>> 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] 

またはリストの内包表記を使用して:

numpyのを使用して
>>> testList 
[False, False, True, True] 
>>> [int(elem) for elem in testList] 
[0, 0, 1, 1] 
+0

したがって、x = 0の場合はy = 1、x> 0の場合はy = 1、 'x:y = 1の場合 'と同じ" NEXT LINE "" else:y = 0 "あなたはどうやってそのトリックを学んだのですか?私は_if文でそれを見ていませんでしたか? – Kwolf

+0

x = 0なら 'y = 1 '、x> 0 else'ならばy = 1と同じではない。なぜなら、後者は負の数を考慮しないからである。これはPythonが 'True'または' False'と定義したものであり、これらはすべてドキュメントにあります。 –

12

、あなたが行うことができます:

y = x.astype(int) 

をあなたは非numpyの配列を使用していた場合、あなたはlist comprehensionを使用することができます。

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

私はあなたが非を求め知っていますループソリューションではありますが、私が思い付く唯一の解決策は、とにかく内部的にループする可能性があります。

map(int,y) 

か:

[i*1 for i in y] 

か:

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

はい、ループが遅いです。私が読んだことから、あなたが時間のクリティカルな処理をする必要がある場合は、Pythonからcを呼び出す必要があります。あなたはこれを行うための参照を知っていますか? また、ご協力いただきありがとうございます。皆がどれほど速く反応したのか驚いた! – Kwolf

4

あなたが変換を必要としないほとんどの時間:

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

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

yourArray.astype(int) 

または

yourArray.astype(float) 
関連する問題