根据它的信息拆分数组

时间:2016-06-09 14:43:37

标签: python arrays python-2.7 numpy

我在python中进行一个项目,该项目包含600个小行星测量数据(直径,周期,轨道半径)。有了这些信息,我想根据直径列制作新的数组,结果数组将是第一个数据的直径间隔。

如果我有这个数组,

diameter           period         orbit radius
 [[  19.17          5.71476129    3.19639121]
 [  19.28          4.81234455    2.85035536]
 [  22.77          5.62890294    3.16429553]
 [   4.8           3.29145453    2.21268592]
 [   7.23          2.61331495    1.89724041]
 [   8.17          2.54935585    1.86615697]
 [ 260.94          6.49151957    3.47983602]
 [ 530.            3.62867648    2.3613482 ]
 [ 952.4           4.60562864    2.76813421]]

我想制作一个直径从0到20的数组

diameter           period         orbit radius
 [[  19.17          5.71476129    3.19639121]
 [  19.28          4.81234455    2.85035536]
 [   4.8           3.29145453    2.21268592]
 [   7.23          2.61331495    1.89724041]
 [   8.17          2.54935585    1.86615697]]

3 个答案:

答案 0 :(得分:4)

只需使用列表推导来过滤它

filtered = [ ast for ast in arr if ast[0]<=20 ]

答案 1 :(得分:1)

您可以使用numpy数组的索引属性轻松构建新数组,并转换为一个内联:

filtered_arr = arr[(arr[:,0]<=20)*(arr[:,0]>=0),:]

或开发:

#we separate the diameters from the rest
diameter_column= arr[:,0]
#we create a (1D) bool array that match diameter between 0 and 20
diameter_filter=(diameter_column<=20) * (diameter_column>=0)
#we use the boolean array as an index to select the right asteroids
filtered_arr=arr[diameter_filter,:]

答案 2 :(得分:1)

假设您希望使用numpy获得所需的矩阵,您可以使用numpy.where来匹配条件,然后应用一个掩码,该掩码可用于索引数组以获取所需的值。

>>>arr[np.where(arr[:, 0] < 20)]

[[ 19.17         5.71476129   3.19639121]
 [ 19.28         4.81234455   2.85035536]
 [  4.8          3.29145453   2.21268592]
 [  7.23         2.61331495   1.89724041]
 [  8.17         2.54935585   1.86615697]]

这里,np.where(arr[:, 0] < 20)检查数组的第一列,并返回行的索引,其中有一个有利的匹配,稍后将用于对原始数组进行切片。