2013-10-31 44 views
1

我有一個數組(10x10),我想創建另一個(10x10)。假設第一個稱爲A,第二個稱爲B.如果A的值分別爲零或另一個值(由我指定),如果A的值不爲零,則我想讓B具有0值。使用numpy數組的元素邏輯檢查

類似的東西

B[i] = A[i] == 0 ? 0 : c 

可以這樣通過numpy的自動完成是這樣的:

B = A == 0 ? 0:c 

或者我必須元素遍歷數組元素?

編輯更多信息:

我有一個numpy的陣列(10×10)A和一個乙相同的尺寸。我創建另一個

dif = A-B 

現在A具有零種元素,B兩組,麥角DIF有一些零元素

我想創建另一個一種C numpy的陣列,其中在C如果A具有零元素的值將是零,但如果不那麼值將DIF/A(元素師)

+0

如果我的回答沒有回答問題,請發佈一個預期輸入和輸出的小例子。 – Daniel

+0

它有點兒。但是當嘗試更大陣列時,我仍然遇到分裂問題。看看這個http://stackoverflow.com/q/19711999/2349589 – Apostolos

回答

3

您可以使用np.where

>>> A 
array([[3, 2, 0, 3], 
     [0, 3, 3, 0], 
     [3, 1, 1, 0], 
     [2, 1, 3, 1]]) 

>>> np.where(A==0, 0, 5) 
array([[5, 5, 0, 5], 
     [0, 5, 5, 0], 
     [5, 5, 5, 0], 
     [5, 5, 5, 5]]) 

這基本上說s其中A==0將0放在其他位置5.第二個和第三個參數可以是多維數組,只要它們與您的遮罩具有相同的尺寸。

C 
array([[7, 8, 8, 6], 
     [5, 7, 5, 5], 
     [6, 9, 9, 9], 
     [9, 7, 5, 8]]) 

np.where(A==0 ,0, C) 
array([[7, 8, 0, 6], 
     [0, 7, 5, 0], 
     [6, 9, 9, 0], 
     [9, 7, 5, 8]]) 

D 
array([[145, 179, 123, 129], 
     [173, 156, 108, 130], 
     [186, 162, 157, 197], 
     [178, 160, 176, 103]]) 

np.where(A==0, D, C) 
array([[ 7, 8, 123, 6], 
     [173, 7, 5, 130], 
     [ 6, 9, 9, 197], 
     [ 9, 7, 5, 8]]) 
+0

是的,但這是改變數據在同一個陣列上。我想在哪裏A == 0 B = 0否則B = c – Apostolos

+0

'c'是一個numpy數組嗎?如果是這樣的話,只要'c'具有與'A'相同的尺寸,就可以用'c'代替5。 – Daniel

+0

大聲笑認爲我明白了...... B = np.where(A == 0,0,c)對不對? – Apostolos