如何根据python中的第二列对二维数组(numpy.ndarray)进行排序? [英] How to sort 2D array (numpy.ndarray) based to the second column in python?

查看:64
本文介绍了如何根据python中的第二列对二维数组(numpy.ndarray)进行排序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将我的所有代码转换为 Python.我想对一个有两列的数组进行排序,以便排序必须基于升序的第 2 列.然后我需要对第一列数据求和(例如,从第一行到第 100 行).我使用了Data.sort(axis=1)",但它不起作用.有没有人有解决这个问题的想法?

解决方案

Use .argsort() 它返回一个 numpy.array 索引,对给定的 numpy.array.您可以将其称为函数或数组上的方法.例如,假设您有

将 numpy 导入为 nparr = np.array([[-0.30565392, -0.96605562],[0.85331367,-2.62963495],[ 0.87839643, -0.28283675],[ 0.72676698, 0.93213482],[-0.52007354, 0.27752806],[-0.08701666, 0.22764316],[-1.78897817, 0.50737573],[0.62260038,-1.96012161],[-1.98231706, 0.36523876],[-1.07587382, -2.3022289 ]])

您现在可以在要排序的列上调用 .argsort(),它将为您提供一个行索引数组,对特定列进行排序,您可以将其作为索引传递给您的原始数组.

<预><代码>>>>arr[arr[:, 1].argsort()]数组([[ 0.85331367, -2.62963495],[-1.07587382, -2.3022289 ],[0.62260038,-1.96012161],[-0.30565392, -0.96605562],[ 0.87839643, -0.28283675],[-0.08701666, 0.22764316],[-0.52007354, 0.27752806],[-1.98231706, 0.36523876],[-1.78897817, 0.50737573],[ 0.72676698, 0.93213482]])

你可以等效地使用 numpy.argsort()

<预><代码>>>>arr[np.argsort(arr[:, 1])]数组([[ 0.85331367, -2.62963495],[-1.07587382, -2.3022289 ],[0.62260038,-1.96012161],[-0.30565392, -0.96605562],[ 0.87839643, -0.28283675],[-0.08701666, 0.22764316],[-0.52007354, 0.27752806],[-1.98231706, 0.36523876],[-1.78897817, 0.50737573],[ 0.72676698, 0.93213482]])

I'm trying to convert all my codes to Python. I want to sort an array which has two columns so that the sorting must be based on the 2th column in the ascending order. Then I need to sum the first column data (from first line to, for example, 100th line). I used "Data.sort(axis=1)", but it doesn't work. Does anyone have any idea to solve this problem?

解决方案

Use .argsort() it returns an numpy.array of indices that sort the given numpy.array. You call it as a function or as a method on your array. For example, suppose you have

import numpy as np

arr = np.array([[-0.30565392, -0.96605562],
                [ 0.85331367, -2.62963495],
                [ 0.87839643, -0.28283675],
                [ 0.72676698,  0.93213482],
                [-0.52007354,  0.27752806],
                [-0.08701666,  0.22764316],
                [-1.78897817,  0.50737573],
                [ 0.62260038, -1.96012161],
                [-1.98231706,  0.36523876],
                [-1.07587382, -2.3022289 ]])

You can now call .argsort() on the column you want to sort, and it will give you an array of row indices that sort that particular column which you can pass as an index to your original array.

>>> arr[arr[:, 1].argsort()]
array([[ 0.85331367, -2.62963495],
       [-1.07587382, -2.3022289 ],
       [ 0.62260038, -1.96012161],
       [-0.30565392, -0.96605562],
       [ 0.87839643, -0.28283675],
       [-0.08701666,  0.22764316],
       [-0.52007354,  0.27752806],
       [-1.98231706,  0.36523876],
       [-1.78897817,  0.50737573],
       [ 0.72676698,  0.93213482]])

You can equivalently use numpy.argsort()

>>> arr[np.argsort(arr[:, 1])]
array([[ 0.85331367, -2.62963495],
       [-1.07587382, -2.3022289 ],
       [ 0.62260038, -1.96012161],
       [-0.30565392, -0.96605562],
       [ 0.87839643, -0.28283675],
       [-0.08701666,  0.22764316],
       [-0.52007354,  0.27752806],
       [-1.98231706,  0.36523876],
       [-1.78897817,  0.50737573],
       [ 0.72676698,  0.93213482]])

这篇关于如何根据python中的第二列对二维数组(numpy.ndarray)进行排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆