2014-08-29 27 views
0

this Matlab question類似,我想知道如何通過切斷大於特定閾值的值來截斷numpy數組。問題數組的值按升序排列。如何截斷大於指定值的值的numpy數組?

import numpy as np 
a=np.linspace(1,10,num=10) 
truncatevalue = 5.5 

我怎麼會產生小於truncatevalue,而且只包括那些價值觀具有的a數組中的值?在這種情況下,所得的陣列將是

a_truncated=([1., 2., 3., 4., 5.]) 

加成:我實際上有兩個陣列我想基於在陣列中的一個的值,以截斷。

import numpy as np 
a=np.linspace(1,10,num=10) 
b=np.array([19, 17, 15, 14, 29, 33, 28, 4, 90, 6]) 
truncatevalue = 5.5 

b是任意陣列,我只是選擇了一些數字爲一定的例子。我想截斷b以同樣的方式,a被截斷,這樣的結果將是

a_truncated=([1., 2., 3., 4., 5.]) 
b_truncated=([19, 17, 15, 14, 29]) 

我不知道這是否是因爲人云亦云,需要做的事情得到a_truncated什麼一樣簡單或者不是,所以我想包括它以防萬一有什麼不同之處需要完成。

回答

4

可以使用布爾索引:

>>> a = np.linspace(1, 10, num=10) 
>>> truncatevalue = 5.5 
>>> a_truncated = a[a < truncatevalue] 
>>> a_truncated 
array([ 1., 2., 3., 4., 5.]) 

實質上,a < truncatevalue返回一個布爾數組,指明a的元素是否滿足條件。使用此布爾數組索引a可返回a的視圖,其中每個元素的索引爲True

因此,對於你問題的第二部分,所有你需要做的是這樣的:

>>> b = np.array([19, 17, 15, 14, 29, 33, 28, 4, 90, 6]) 
>>> b_truncated = b[a < truncatevalue] 
>>> b_truncated 
array([19, 17, 15, 14, 29]) 
+0

您需要'a_truncated =一[A Joshua 2014-08-29 20:44:52

+0

@Joshua - 要在您的示例中返回'a_truncated'或'b_truncated',您只需要布爾數組'a 2014-08-29 20:56:07

-3
a_truncated = [value for value in a if value < truncateValue]