5

鉴于我的知识水平(或缺乏),我很欣赏这项任务可能有点雄心勃勃,但仍然如此。

我有一个包含 16 个字符串的列表,大约 3000 个项目长,其中每个字符表示另一个数字列表。不知道我是否说清楚了;它实际上是一个 16 个氨基酸长肽的列表,其中每个氨基酸(20 个中的 1 个)可以用 5 个数字表示。

我想遍历该列表(肽),然后为每个字符(氨基酸)添加相关的 5 个数字(如果你有兴趣,Atchley 因子)到一个数组,制作一个 3 维数组,我的轴是:肽(3000)x该肽中的氨基酸(16)x因子(5)的实例。

我难以置信地超出了我的深度,所以我不确定我所拥有的是否有用,但这里是(使用 numpy):

array = np.empty(shape=(len(peptides),16,5)

for i in peptides:

    for j in str(i):

(在这一点上,我在论坛上搜索了很多不同的东西,最后得到了一些类似的东西,但我敢肯定,我什至错过了我在这里的目标)

    if j == 'A':    
            L16Afctrs = np.append([-0.59145974, -1.30209266, -0.7330651, 1.5703918, -0.14550842], axis=1)
    elif j == 'C':
            L16Afctrs = np.append([-1.34267179, 0.46542300, -0.8620345, -1.0200786, -0.25516894], axis=1)
    ...
    elif j == 'Y':
            L16Afctrs = np.append([0.25999617, 0.82992312, 3.0973596, -0.8380164, 1.51150958], axis=1)

就像我说的那样,我真的很挣扎,任何帮助将不胜感激。

编辑:澄清(希望)

我有一个大约 3000 个不同的 16 个字符串的列表,其中这些字符串中的每个字符表示另外 5 个数字。

我想生成一个 3 维数组或结构,由此我可以(最终)通过查看 3 维数组中的给定平面(我设想的维度是;原始字符串 x 16 个字符 x 5 个因子)。

我目前正在制作与@Winston 的帖子相关的不同字符的字典,然后尝试将其折叠成 3d 数组。

编辑2:成功!

温斯顿的修复效果很好!

4

1 回答 1

2

将数据存储在字典中:

DATA = {
    'A' : numpy.array([-0.59145974, -1.30209266, -0.7330651, 1.5703918, -0.14550842]),
    'B' : numpy.array([-1.34267179, 0.46542300, -0.8620345, -1.0200786, -0.25516894]),
    'D' : numpy.array([1.05015062, 0.30242411, -3.6559147, -0.2590236, -3.24176791])
    ...
}

使用 python 列表推导来构建所有这些列表,然后让 numpy 将该列表转换为 numpy 数组

counters = numpy.array([DATA[letter] for peptide in peptides for letter in peptide])

将数组重塑为您的 3D 尺寸,因为最后一步将有 2D 数组

counters = counters.reshape( len(peptides), 16, 5 )
于 2012-11-09T18:51:47.337 回答