2012-05-10 9 views
11

python27でmatlabコードを書き直そうとしています。次のようにMatlabのラインがあります:numpy.arrayブール値をバイナリに変換しますか?

vector_C = vector_A > vector_B; 

私はnumpyのを使ってpythonでこれを書いしようとした場合、それは同じになりますが、結果がブール値の代わりに、バイナリの配列になります。私は結果をバイナリにしたい。それはバイナリを返すようにする方法はありますか、毎回手動で変換する必要がありますか?それを簡単に変換する方法はありますか?私はPythonの初心者です。ありがとう。

+0

を私はMathWorks社のMATLABバイナリとPythonブール値が同等であると信じています。あなたはnumpyのブール値ベクトルで行うことができないバイナリベクトルを使ってMATLABコードに何かしていますか? –

+0

私はブール値ベクトルで何もやろうとしませんでした。しかし、私はブール値ベクトルを "1"で除算したので、今はバイナリです。私はそれを修正しなくても使うことができたと思う。ありがとう –

+0

それはあなたのためにあなた自身の質問に答えてそれを閉じるために働く場合。 – dtlussier

答えて

14

vector_Cdtype=bool持っている場合でも、あなたはまだ次のような操作を行うことができます。

In [1]: vector_A = scipy.randn(4) 

In [2]: vector_B = scipy.zeros(4) 

In [3]: vector_A 
Out[3]: array([ 0.12515902, -0.53244222, -0.67717936, -0.74164708]) 

In [4]: vector_B 
Out[4]: array([ 0., 0., 0., 0.]) 

In [5]: vector_C = vector_A > vector_B 

In [6]: vector_C 
Out[6]: array([ True, False, False, False], dtype=bool) 

In [7]: vector_C.sum() 
Out[7]: 1 

In [8]: vector_C.mean() 
Out[8]: 0.25 

In [9]: 3 - vector_C 
Out[9]: array([2, 3, 3, 3]) 

だから、要するに、あなたはおそらく、余分な何もする必要はありません。

しかし、あなたは、変換を行う必要がある場合、あなたはastype使用できます

In [10]: vector_C.astype(int) 
Out[10]: array([1, 0, 0, 0]) 

In [11]: vector_C.astype(float) 
Out[11]: array([ 1., 0., 0., 0.]) 
5

numpyに強制的に要素を整数として格納することができます。これは、0を偽として、1を真として扱います。

import numpy 

vector_C = numpy.array(vector_A > vector_B, dtype=int) ; 
関連する問題