在python中将数组拆分为子数组

2024-05-15 23:00:22 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我是编程和python编程新手。 我用numpy.getfromtxt导入了一个制表符分隔的txt文件,它看起来像

[['chr' 'start' 'end' 'name' 'score' 'strand']
['chr1' '822979' '822980' 'CLL6.08_1_snv' '88.2' '+']
..., 
['chrX' '153986959' '153986960' 'CLL6.08_2678_snv' '500' '+']]

我想把这些数据分成不同染色体的子数组

^{pr2}$

我正在尝试类似的方法,但是遇到语法错误。我试图这样做,因为我想提取每一个染色体数据时,有条件。在

import numpy as np  
data=np.genfromtxt("CLL608.txt",delimiter ="\t",dtype=None,skip_header=0)
subarray=(['Chr1':data[data[:,0]=='chr1'], 'Chr2':data[data[:,0]=='chr2']])

我真的很感激在这方面的任何建议。在


Tags: 文件数据numpytxtdata编程npstart
2条回答

不能在列表[]中建立关联必须使用词典{}

>>> subarray=({'Chr1':'bla'=='blu'})
>>> print subarray
{'Chr1': False}

创建一个dict-ianary,它接受一个字符串(或任何散列对象)并返回任意值。使用它可以将“chr”名称映射到仅包含这些记录的子数组:

sublists = {}  # empty dict
for record in data:
    key = record[0] # 'chr1' or whatever
    if key in sublists:   # already seen it?
        sublists[key].append(record)
    else:
        sublists[key] = [record]  # start new sublist

您可以通过了解Python中“我希望我的字典有新键的默认值”问题经常出现并且有一些标准的解决方案来加快速度:

^{pr2}$

list()创建一个新的空列表。空列表或以前存在的列表都附加了record。在

最后,通过认识到遍历一个列表并对其只做一件事是对map函数的一个很好的使用,您可以更快地实现这一点。尽管通常情况下,您使用的结果都是使用map。在

sublists = {}
map(data, lambda r: sublists.get(r[0], list()).append(r))

最后,如果您的数据恰好在键值上被排序,那么您可以使用^{}函数,如果数据已经排序,它将为您处理分组逻辑。我提到最后两个(mapgroupby),因为我怀疑您的数据集可能很大,性能可能是一个问题。在

相关问题 更多 >