2012-05-10 60 views
11

我想重寫python27中的matlab代碼。有一個MATLAB線如下:numpy.array布爾二進制?

vector_C = vector_A > vector_B; 

如果我嘗試使用numpy的將是同樣在Python寫這個,但結果將是布爾值,而不是二進制數組。我想要的結果是在二進制文件。有沒有辦法讓它返回二進制或每次都應該手動轉換?有沒有快速轉換它的方法?我是python的新手。謝謝。

+0

我相信matlab的二進制和Python布爾是等價的。你有沒有在二進制向量的matlab代碼中做什麼,你不能用numpy布爾向量做什麼? –

+0

我沒有嘗試用布爾向量做任何事情。但是,我只是將布爾向量除以「1」,所以它現在是二進制的。我想我也可以使用它而不做任何修改。謝謝 –

+0

如果這對您有用,請回答您自己的問題以關閉它。 – dtlussier

回答

14

即使vector_C可能有dtype=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) ;