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