gpt4 book ai didi

python - 使用 for 循环构建 NumPy 数组(列表的列表?)

转载 作者:行者123 更新时间:2023-11-30 22:06:06 25 4
gpt4 key购买 nike

我正在尝试构建一个数组,其中每行包含来自不同序列的 k-mers(k 长度的核苷酸字符串)。我一直在读到,你不能真正拥有空数组,并且我很难尝试使用追加。

bases = ['A', 'T', 'C', 'G']
self.profile = np.array([])

for x in range(1):
k = self.ksize
kmer = [''.join(p) for p in itertools.product(bases, repeat=k)]
for i in range(0, len(self.motifs)):
for q in range(0, len(kmer)):
if kmer[q] in self.motifs[i]:
self.kmers.append(kmer[q])
self.profile[i] = self.kmers

我在这里得到的错误是:“IndexError:索引 0 超出尺寸为 0 的轴 0 的范围”

我意识到这是因为我没有指定数组的形状,但我只知道会有多少行,我不知道会有多少列(列大小取决于有多少k -mers 在每个序列中都有发现)。

如果我尝试将其设为“列表的列表”:

bases = ['A', 'T', 'C', 'G']
self.profile = list()

for x in range(1):
k = self.ksize
kmer = [''.join(p) for p in itertools.product(bases, repeat=k)]
for i in range(0, len(self.motifs)):
for q in range(0, len(kmer)):
if kmer[q] in self.motifs[i]:
self.kmers.append(kmer[q])
self.profile[i] = self.kmers

我刚刚得到:self.profile[i] = self.kmersIndexError:列表分配索引超出范围

有更好的方法吗?

最佳答案

从评论中收集信息,我认为您想要的是以下内容:给定一个基序列表(在您的情况下,每个核苷酸串长 50 个碱基),您需要长度为 k 的子序列(k-mers)出现在每一个中。编写代码的更 Pythonic 方式是:

bases = ['A', 'T', 'C', 'G']
self.profile = []

k = self.ksize
kmer = [''.join(p) for p in itertools.product(bases, repeat=k)]

for mot in self.motifs:
for km in kmer:
if km in mot:
self.kmers.append(km)
self.profile.append(self.kmers)

请注意,在 python 中,如果您只想使用它来访问列表、数组或任何可迭代对象,则不需要循环索引;你可以只循环迭代本身。检查 zipenumerate 以获得更大的灵 active 。

最后一件事:请注意,self.kmer 将是一个包含 [kmer1, kmer2, kmer4, kmer6] 等的列表(即,您的 kmer主题),但您将无法区分主题。此外,self.profile 将是包含 [[kmer1]、[kmer1, kmer2]、[kmer1, kmer2, kmer4]] 等的列表的列表。

如果你不关心 self.profile (因为你可以稍后构建它),你可以用大列表理解来完成所有事情:

kmers = [km for mot in motifs for km in kmer if km in mot]

编辑:两件额外的事情

请注意,这样,kmers 将具有重复的序列。为了避免这种情况,您可以编写一个额外的检查(如果 km 不在 self.kmers 中),或者更确切地说使用 sets ,避免重复。

如果您确实想要由主题分隔的 kmers 列表,您可以通过列表理解以更简单的方式实现:

self.profile = [] 
for mot in motifs:
individual_km = [km for km in kmer if km in mot]
self.profile.append(individual_km)

关于python - 使用 for 循环构建 NumPy 数组(列表的列表?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52827491/

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