2012-04-18 28 views
1

我有兩個10x2x2 complex64陣列。我想找到其中的2x2陣列的不是一個或兩個全零:在兩個相同形狀的複雜多維數組中檢查條件

import numpy 
a = numpy.zeros((10,2,2), "complex64") 
b = numpy.ones((10,2,2), "complex64") 

empty_one_or_both = (a.reshape(10,4) != 0).all(axis=1) * (b.reshape(10,4) != 0).all(axis=1) # EDIT 

的目標是隻在非空對執行其他操作,如:

numpy.sqrt(a[empty_one_or_both]) 

有更好的方法?

+0

使用'*'只會匹配那些與兩個矩陣爲零。我想你想'''。 – 2012-04-18 15:14:02

+0

看到編輯,尋找逆向問題,找到哪些不是全都爲零,以至於有一個可用的掩碼。 – Benjamin 2012-04-18 15:34:08

+0

在這種情況下,我肯定更喜歡'&'或'numpy.logical_and()'來代替'*'。結果當然是一樣的,但是當你想表達的是一個邏輯AND似乎有點奇怪時,乘以布爾值。 (除此之外,我想不出任何你可能想要改進的方法,它很直接,很有效率,所以什麼讓你困擾?) – 2012-04-18 15:36:12

回答

2

作爲numpy的1.7的你可以這樣做:

a.all(axis=(1, 2)) & b.all(axis=(1, 2)) 

docs更多的詳細信息,但如果您使用的是舊版本,我認爲你必須重塑,或做所有(1) 。所有(1)。

+0

接受這一點,但也要感謝Sven Marnach的評論。 – Benjamin 2012-04-18 17:00:28