gpt4 book ai didi

python - 字符串列表时如何按第一列将二维数组排序为数字? (Python)

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:49 26 4
gpt4 key购买 nike

我有一个二维数组,我试图按第一列排序。然而,目前数组中的每个元素都是一个字符串,我希望第一列被视为一个整数,这样我就可以按数字排序(1、2、6、11 ...而不是 1、11、224, 23,...)。我正在使用 numpy 包生成这些数组,使用 x = numpy.loadtxt('file.txt', dtype = 'str', delimiter = '\t') 这给了我:

array([['140', 'GGC'],
['256', 'AGGG'],
['841', 'CA'],
['46', 'TTATAGG'],
['64', 'AGAGAAAGGATTATG'],
['156', 'AGC'],
['187', 'GGA'],
['701', 'TTCG'],
['700', 'TC']],
dtype='|S15')

1) 我知道我可以使用以下方法将第一列转换为整数:

x[:,0].astype(int)

输出一维数组。但我不确定如何直接对我的二维数组进行更改?

2) 一旦我可以将我的第一列转换(或处理)为整数,我知道我可以使用以下方法进行排序:

sorted(x, key=lambda x: x[0])

但这是对我的数据类型来说最好的方法吗?

最佳答案

由于您正在处理array 数据,您可以使用np.argsort 获取基于第一列的排序索引。然后简单地用这些索引到数组中,就像这样 -

x[x[:,0].astype(int).argsort()]

从性能的角度来看,这应该比使用 lambda 好得多,因为使用 argsort 然后 indexing 都是可以工作的向量化方法非常有效地处理数组数据。

sample 运行-

In [56]: x
Out[56]:
array([['140', 'GGC'],
['256', 'AGGG'],
['841', 'CA'],
['46', 'TTATAGG'],
['64', 'AGAGAAAGGATTATG'],
['156', 'AGC'],
['187', 'GGA'],
['701', 'TTCG'],
['700', 'TC']],
dtype='|S15')

In [57]: x[x[:,0].astype(int).argsort()]
Out[57]:
array([['46', 'TTATAGG'],
['64', 'AGAGAAAGGATTATG'],
['140', 'GGC'],
['156', 'AGC'],
['187', 'GGA'],
['256', 'AGGG'],
['700', 'TC'],
['701', 'TTCG'],
['841', 'CA']],
dtype='|S15')

关于python - 字符串列表时如何按第一列将二维数组排序为数字? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43624858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com