2017-08-06 65 views
3

例如替換numpy的數組元素,我有一些陣列等:使用一些條件

>>> x = np.arange(-5, 4).reshape(3, 3) 
>>> x 
array([[-5, -4, -3], 
     [-2, -1, 0], 
     [ 1, 2, 3]]) 

如何可以替換b其是大於a否則它們設置爲0所有元素?

我試圖

np.place(x, lambda y: b if y > a else 0) 

但它沒有發揮出來。

回答

2

您可以使用numpy.where

x = np.arange(-5, 4).reshape(3, 3) 
x 
#array([[-5, -4, -3], 
#  [-2, -1, 0], 
#  [ 1, 2, 3]]) 

b = 1; a = 0; 
np.where(x > a, b, 0) 
#array([[0, 0, 0], 
#  [0, 0, 0], 
#  [1, 1, 1]]) 
+0

如果條件爲真,我該如何保持數組中的相同數字? (otherwize將其更改爲「0」) –

+1

您可以用'x'替換'b'。如果條件爲真,'np.where(x> a,x,0)',將從'x'本身中選擇值。或者在原地'x [x <= a] = 0'。 – Psidom

1

還不如np.where那樣好,但是你的情況,你可以簡單地乘以「布爾數組」當你與b比較你的數組a你:

>>> x = np.arange(-5, 4).reshape(3, 3) 
>>> a, b = 0, 6 
>>> (x > a) * b 
array([[0, 0, 0], 
     [0, 0, 0], 
     [6, 6, 6]]) 

這是可行的,因爲True相當於1False0算術運算。