我有下面的代码,其中包含几个numpy数组,我试图根据ID按数字顺序排序:
from astropy.table import Table
import numpy as np
from math import log10
cat_fil = '/home/myname/filtered_catalogue.csv'
cat_fil = Table.read(cat_fil, format="ascii")
ID = np.array(cat_fil['id'])
ID = ID.astype(str)
redshift = np.array(cat_fil['z'])
redshift = redshift.astype(float)
radius = np.array(cat_fil['radius_pixels'])
radius = radius.astype(float)
mag = np.array(cat_fil['magntiude'])
mag = mag.astype(float)
stacked = np.column_stack((ID, redshift, radius, mag))
stacked = stacked.astype(float)
idx = ((stacked[:, 1] > 0.0) &
(stacked[:, 2] > 10.0) &
(stacked[:, 3] > 0.0))
filtered = stacked[idx]
**filtered = np.sort(filtered, axis = 0)**
print(filtered[0])我遇到的问题是对数组进行排序。每当我按数字递增的顺序对ID进行排序时,它不会移动其他数据的其余部分,这意味着当我的代码运行时,它为每个ID分配了错误的值。有没有一种方法可以按照递增的数字ID对所有的numpy数组进行排序,同时保持实际的行在一起,以便正确的数据彼此相邻。
发布于 2020-02-27 01:14:35
通过快速阅读您的问题/代码,我知道您有一个2d数组,您希望在第一列对其进行排序。让我们像这样做一个简单的数组:
In [258]: arr = np.random.randint(0,10,(4,3))
In [259]: arr
Out[259]:
array([[0, 9, 7],
[8, 7, 1],
[3, 7, 8],
[3, 5, 9]])对于轴参数为0的Sort,分别对每一列进行排序:
In [260]: np.sort(arr, axis=0)
Out[260]:
array([[0, 5, 1],
[3, 7, 7],
[3, 7, 8],
[8, 9, 9]])但是使用argsort,我们只获得排序第一列的索引:
In [261]: idx = np.argsort(arr[:,0])
In [262]: idx
Out[262]: array([0, 2, 3, 1])然后,我们可以使用它对所有行进行重新排序
In [263]: arr[idx,:]
Out[263]:
array([[0, 9, 7],
[3, 7, 8],
[3, 5, 9],
[8, 7, 1]])https://stackoverflow.com/questions/60415579
复制相似问题