2013-09-25 99 views
0

我想在數組的第三列的元素小於特定數量時刪除數組的行。例如:如果行的其中一個元素不滿足條件,我該如何刪除數組的行?

a=np.array([[2331.13,1944.88,23.1379,7,3.18339,0.482105], 
[8168.44,1904.70,19.5025,265,4.12642,0.0376510], 
[7389.36,1983.97,14.3581,3937,6.04109,0.713416], 
[1765.18,1944.29,22.5495,35,2.30717,0.794432], 
[2319.33,1946.68,22.4300,25,3.63676,0.0210690], 
[785.666,2090.69,14.7940,1095,2.52823,0.999842], 
[4071.24,2186.92,22.6616,31,2.79309,0.0312501], 
[7082.51,2191.69,23.0122,19,2.53166,0.687001]]) 

我想刪除滿足下列條件的行:

a[:,2]<15.0 

乾杯。

+0

[Index error,從數組中刪除行如果列有值](http://stackoverflow.com/q/18858396/1730674) – askewchan

回答

5

你可以這樣做:

a[a[:,2]>=15.0, :] 

a[:,2]<15.0的反演a[:,2]>=15.0,讓你描述要行保持而不是刪除

如果您反轉條件不那麼簡單,你也可以使用~

a[~(a[:,2]<15.0), :] 
+1

我傾向於使用代字號代替:'a [〜(a [:,2] <15),: ]'。 – DSM

+0

@DSM:好主意,謝謝 –

+0

注意,這並不會刪除數組中的行,它只是顯示其他行。要做到這一點,你必須做這樣的事情:'a = a [a [:,2]> = 15]'或者a = np.delete(a,np.where(a [:,2] <15, 0)'。(另外,不需要後綴':') – askewchan

0

我想刪除的行或列的最直接的方法是使用np.delete

>>> a = np.arange(16).reshape(4,4) 
>>> a 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11], 
     [12, 13, 14, 15]]) 
>>> a[:,2] 
array([ 2, 6, 10, 14]) 
>>> to_remove = a[:,2] < 7 
>>> to_remove 
array([ True, True, False, False], dtype=bool) 
>>> new_a = np.delete(a, to_remove, axis=0) 
>>> new_a 
array([[ 8, 9, 10, 11], 
     [12, 13, 14, 15]]) 

在一行中:

new_a = np.delete(a, a[:,2] < 7, axis=0) 
相關問題