通过迭代列表在python中生成三维数组

jay*_*mee 5 python arrays numpy multidimensional-array

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

我有一个包含16个字符串的列表,大约3000个项目,其中每个字符表示另一个数字列表.不确定我是否说得那么清楚; 它实际上是16个氨基酸长肽的列表,其中每个氨基酸(20个中的1个)可由5个数字表示.

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

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

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

for i in peptides:

    for j in str(i):
Run Code Online (Sandbox Code Playgroud)

(此时我尝试了一堆不同的东西,因为我在论坛上搜索,结尾的东西有点像这样,但我确信我甚至错过了我的目标)

    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)
Run Code Online (Sandbox Code Playgroud)

就像我说的那样,我老老实实地在努力,任何帮助都会非常感激.

编辑:澄清(希望如此)

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

我想生成一个三维数组或结构,通过查看三维数组中的给定平面(我设想的维度是原始的),我可以(最终)绘制所有3000个字符串中给定位置的5个数字.字符串x 16个字符x 5个因子).

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

编辑2:成功!

温斯顿的修复效果非常好!

Win*_*ert 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])
    ...
}
Run Code Online (Sandbox Code Playgroud)

使用 python 列表理解构建所有这些的列表,然后让 numpy 将该列表转换为 numpy 数组

counters = numpy.array([DATA[letter] for peptide in peptides for letter in peptide])
Run Code Online (Sandbox Code Playgroud)

将数组重塑为 3D 维度,因为最后一步将具有 2D 数组

counters = counters.reshape( len(peptides), 16, 5 )
Run Code Online (Sandbox Code Playgroud)