gpt4 book ai didi

python - 使用包含浮点值的 np.lexsort 对 numpy 数组进行排序

转载 作者:行者123 更新时间:2023-12-01 04:52:10 24 4
gpt4 key购买 nike

我正在编写一个程序,根据特定公司内氨基酸的能量值(value)对氨基酸名称进行排序。

我已将相关数据提取到以下 numpy 数组中。

我尝试过这个

In[37]: Data = np.array([
['ASN 205', -9.64164],
['LEU 206', -8.985774],
['ASN 207', -7.314434],
['PRO 208', -4.105338],
['ASN 209', -2.092342],
['GLY 210', -2.101412],
['LYS 211', -2.483852],
['ARG 212', -24.20364],
['SER 213', -1.181002],
['VAL 214', 0.057618]])
In[38]: ind3 = np.lexsort((Data[:,0],Data[:,1]))
In[39]: Result = Data[ind3]
In[40]: Result
Out[40]:
array([['SER 213', '-1.181002'],
['ASN 209', '-2.092342'],
['GLY 210', '-2.101412'],
['LYS 211', '-2.483852'],
['ARG 212', '-24.20364'],
['PRO 208', '-4.105338'],
['ASN 207', '-7.314434'],
['LEU 206', '-8.985774'],
['ASN 205', '-9.64164'],
['VAL 214', '0.057618']],
dtype='|S9')

但这里的问题是浮点值是按字典顺序排列的。我希望它按照它们的值排序,首先是-24.20364,然后是...-2.483852。

我该怎么做?

最佳答案

解释:np.array 将所有传递的参数转换为适合所有参数的最大类型,即您的 float 在第 1 行中转换。您可以改为使用具有特定数据类型的元组,如下所示:

Data = np.array([
('ASN 205', -9.64164),
('LEU 206', -8.985774),
('ASN 207', -7.314434),
('PRO 208', -4.105338),
('ASN 209', -2.092342),
('GLY 210', -2.101412),
('LYS 211', -2.483852),
('ARG 212', -24.20364),
('SER 213', -1.181002),
('VAL 214', 0.057618)], dtype=[('f', '|S9'), ('g', float)])
ind3 = np.lexsort((Data['f'], Data['g']))
Result = Data[ind3]Out[8]:

输出:

array([('ARG 212', -24.20364), ('ASN 205', -9.64164),
('LEU 206', -8.985774), ('ASN 207', -7.314434),
('PRO 208', -4.105338), ('LYS 211', -2.483852),
('GLY 210', -2.101412), ('ASN 209', -2.092342),
('SER 213', -1.181002), ('VAL 214', 0.057618)],
dtype=[('f', 'S9'), ('g', '<f8')])

关于python - 使用包含浮点值的 np.lexsort 对 numpy 数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28192776/

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