【发布时间】:2016-01-02 21:37:17
【问题描述】:
一般问题: 我尝试使用 matrix.T 转置一个大的 numpy 矩阵。使用小型测试文件时效果很好。但是,当使用大文件时,只有前 3 行和后 3 行被转置,但中间的行(总共约 250,000 行)没有被转置并且打印为“...”。此外,每行仅显示第一个和最后 3 个核苷酸。最后,它看起来像这样:
[['C' 'T' 'C' ..., 'A' 'C' 'T']
['C' 'T' 'A' ..., 'A' 'T' 'G']
['C' 'T' 'A' ..., 'G' 'C' 'A']
...,
['T' 'A' 'A' ..., 'G' 'A' 'T']
['T' 'A' 'A' ..., 'C' 'G' 'T']
['C' 'G' 'T' ..., 'A' 'A' 'G']]]
这是我的代码:
import numpy as np
with open("temp1.txt","rt") as infile:
matrix = np.matrix([list(line.strip()) for line in infile.readlines()])
x = matrix.T
file_temp2.write(str(x))
解释: 1. temp1.txt 包含约 250,000 个 DNA 序列,长度为 100 个核苷酸(A、C、T 和 G)。这些行在 100 个核苷酸之后用“\n”分隔。第一行如下所示:
CCCTAAAACCCTAAACCCTAAACCCTAAACCTCTGAATCCTTAATCCCTAAATCCCTAAATCTTTAAATCCTACATCCATGAATCCCTAAATACCTAATTC TTTATGTTTGGACATTTATTGTCATTCTTACTCCTTTGTGGAAATGTTTGTTCTATCAATTTATCTTTTGTGGGAAAATTATTTAGTTGTAGGGATGAAG CAAAGTTCTTCCGCCTGATTAATTATCCATTTTACCTTTGTCGTAGATATTAGGTAATCTGTAAGTCAACTCATATACAACTCATAATTTAAAATAAAAT AAAAAAGTTGTAATTATTAATGATAGTTCTGTGATTCCTCCATGAATCACATCTGCTTGATTTTTCTTTCATAAATTTATAAGTAATACATTCTTATAAA TATATGGAAGATGTGAATGAAGTTTTGGTCCTGAATGTGGCCAAGGTTCCGTCATTTGGAGATACGAAATCAAATCTCCTTTAAGATTTTGTTTTTATAA
等等
2. temp1.txt 被转换为 numpy 矩阵并最终转置,使用测试文件(仅包含 10 个序列)可以正常工作。但是,在大文件中,转置时会出现上述一般问题。
?解决方案?: 您是否知道如何将大文件的完整转置矩阵最终写入我的 temp2.txt 以进行进一步分析。
!!!找到解决方案: 最后,我发现我必须在保存之前将矩阵转换为列表。在写入文件之前,我必须先执行 y = np.array(x)[0:].tolist() 。现在它正在工作。现在的代码是:
import numpy as np
with open("temp1.txt","rt") as infile:
matrix = np.matrix([list(line.strip()) for line in infile.readlines()])
x = matrix.T
y = np.array(x)[0:].tolist()
z = str(y).replace("], [", "\n")
file_temp2.write(str(z))
【问题讨论】:
-
我认为它是转置的。但是这 3 个点只是演示(防止在屏幕上打印巨大的矩阵)
-
您希望
str(x)用于大型矩阵吗? -
@itai:谢谢,但我忘了说这不是屏幕上显示的内容。这就是 temp2.txt 文件的内容。 temp2.txt只有2KB大小,这也说明里面什么都没有了。
-
@Alan:一个巨大的 250,000 X 100 矩阵(这可能吗?)。使用它工作的测试文件(生成一个 10 X 100 的矩阵)。
标签: python arrays numpy matrix transpose