在python中将数组拆分为子数组的步骤

在python中将数组拆分为子数组的步骤,python,numpy,Python,Numpy,嗨,我是编程和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' '+']] 我想把这些数据分成不同染色体的子阵列,比如

嗨,我是编程和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' '+']]
我想把这些数据分成不同染色体的子阵列,比如

Chr1, Chr2 ...
我尝试过类似的方法,但出现了语法错误。我正试图这样做,因为我想有条件地提取每个染色体数据

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']])

在这方面如有任何建议,我将不胜感激

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

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

创建一个
dict
-ionary,它接受一个字符串(或任何可哈希对象)并返回一个任意值。使用它将“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中,整个“我希望我的字典有一个新键的默认值”问题会出现很多,并且有一些标准的解决方案来加快速度:

sublists = {}
for record in data:
    key = record[0]
    sublists.get(key, list()).append(record)
list()
创建一个新的空列表。空列表或以前存在的列表都附加了
记录

最后,您可以通过认识到遍历一个列表并对其执行唯一操作是对
map
函数的良好使用,从而进一步加快这一速度。尽管通常情况下,你会使用你所做的任何事情的结果,比如地图

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

最后,如果您的数据碰巧是按键值排序的,您可以使用函数,如果数据已经排序,该函数将为您处理分组逻辑。我提到了最后两个(
map
groupby
),因为我怀疑您的数据集可能很大,性能可能是一个问题。

您可能想看看
pandas
并使用其数据帧数据结构。