我很欣赏,鉴于我的知识水平(或缺乏),这项任务可能有点雄心勃勃,但仍然存在。
我有一个包含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个数字。
我想生成一个三维数组或结构,通过查看三维数组中的给定平面(我设想的维度),我可以(最终)绘制所有3000个字符串中给定位置的5个数字。是;原始字符串x 16个字符x 5个因子)。
我目前正在编写不同字符的字典,与@Winston的帖子有关,然后尝试将其折叠成3d数组。
编辑2:成功!
温斯顿的修复效果非常好!
答案 0 :(得分: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 list comprehension构建所有这些列表,然后将该列表numpy转换为numpy数组
counters = numpy.array([DATA[letter] for peptide in peptides for letter in peptide])
将阵列重塑为3D维度,因为最后一步将具有2D阵列
counters = counters.reshape( len(peptides), 16, 5 )