首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不打乱其他值的情况下对堆叠的numpy数组进行排序

问如何在不打乱其他值的情况下对堆叠的numpy数组进行排序
EN

Stack Overflow用户
提问于 2020-02-26 21:58:06
回答 1查看 77关注 0票数 0

我有下面的代码,其中包含几个numpy数组,我试图根据ID按数字顺序排序:

代码语言:javascript
复制
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数组进行排序,同时保持实际的行在一起,以便正确的数据彼此相邻。

EN

回答 1

Stack Overflow用户

发布于 2020-02-27 01:14:35

通过快速阅读您的问题/代码,我知道您有一个2d数组,您希望在第一列对其进行排序。让我们像这样做一个简单的数组:

代码语言:javascript
复制
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,分别对每一列进行排序:

代码语言:javascript
复制
In [260]: np.sort(arr, axis=0)                                                                 
Out[260]: 
array([[0, 5, 1],
       [3, 7, 7],
       [3, 7, 8],
       [8, 9, 9]])

但是使用argsort,我们只获得排序第一列的索引:

代码语言:javascript
复制
In [261]: idx = np.argsort(arr[:,0])                                                           
In [262]: idx                                                                                  
Out[262]: array([0, 2, 3, 1])

然后,我们可以使用它对所有行进行重新排序

代码语言:javascript
复制
In [263]: arr[idx,:]                                                                           
Out[263]: 
array([[0, 9, 7],
       [3, 7, 8],
       [3, 5, 9],
       [8, 7, 1]])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60415579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档