我在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]]
答案 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)
检查数组的第一列,并返回行的索引,其中有一个有利的匹配,稍后将用于对原始数组进行切片。