2012-05-10 27 views
11

Python27'de bir matlab kodunu yeniden yazmaya çalışıyorum. Bunların aynı olacak numpy kullanarak python bunu yazmak çalışırsanıznumpy.array ikili için boolean?

vector_C = vector_A > vector_B; 

ama sonuç boole yerine ikili bir dizi olacak: Orada şöyle bir matlab çizgidir. Sonuçların ikili dosyalarda olmasını istiyorum. İkili döndürme yapmanın bir yolu var mı yoksa her seferinde el ile mi dönmeliyim? Dönüştürmenin hızlı bir yolu var mı? Python için yeniyim. Teşekkürler.

+0

İkili ve piton boole eşdeğerdir Matlab inanıyoruz. Sayısal boolean vektörü ile yapamayacağınız ikili vektör ile matlab kodunda yaptığınız bir şey var mı? –

+0

Henüz boolean vektörü ile hiçbir şey yapmaya kalkmadım. Ama ben sadece boolean vektörünü "1" ile böldüm, bu yüzden şimdi ikili. Sanırım herhangi bir değişiklik yapmadan da kullanabilirim. Teşekkürler –

+0

Eğer bu işe yararsa, kapatmak için kendi sorunuzu cevaplayın. – dtlussier

cevap

14

vector_Cdtype=bool sahip olsa bile, yine de aşağıdaki gibi işlemleri yapabilirsiniz:

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

Yani, kısacası, muhtemelen ekstra bir şey yapmak gerekmez.

Ama eğer bir dönüşüm yapmak gerekiyorsa, bunu yapmak için 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

Öğeleri tamsayı olarak depolamak için numpy'yi zorlayabilirsiniz. 0 değerini false ve 1 değeri true olarak kabul eder.

import numpy 

vector_C = numpy.array(vector_A > vector_B, dtype=int) ;