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

Python 使用包含浮点值的np.lexsort对numpy数组进行排序,python,arrays,numpy,Python,Arrays,Numpy,我正在编写一个程序,根据特定公司的能量值对氨基酸的名称进行排序 我已将相关数据提取到以下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.

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

我已将相关数据提取到以下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
将所有传递的参数转换为适合所有参数的最大类型,即在第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')])
数组([('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',”规则是这样说的:“顺序:list,可选当a是结构化数组时,此参数指定要首先比较哪些字段、第二个字段等等。”“请尽快回答”为什么?您的
数据
数组已立即转换为所有字符串数组(
dtype=''S9'))
.String不是一种很好的浮点格式。想一想更好的数据结构,比如dict。在重新排列数据之后,我用我朋友展示的一个粗糙的方法解决了这个问题。方法:
TransposedData=numpy.transpose(data)
Result=data[:,np.argsort(data[1].astype(float))]
DoneI是新手,我从文件中读取此数据,因此所有值都自动转换为字符串。我得到了此结构中的元组
('HIE 203','-1.889138'),('TYR 204','-2.148216'),('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'),
现在如何将这些字符串转换为float?很抱歉这个愚蠢的问题。如果您使用numpy的
loadtxt
,您可以将
dtype=[('f','S9'),('g',float)]传递给它
数据类型的参数。好主意。但问题是我正在读取的文件中的数据包含18列,其中2列为字符串和rest浮点。是否有任何方法可以一次性定义rest 16列的数据类型?还有一件事,是否可以跳过读取某些列。?顺便说一句,我使用的是numpy.genfromtext。