一般問題: 我嘗試使用matrix.T轉置一個大的numpy矩陣。使用小型測試文件時它運行良好。然而,當使用大文件時,只有前3行和後3行被轉置,但其間的行(總共〜250,000)不會被轉置並被打印爲'...'。另外,每行僅顯示第一個和最後3個核苷酸。最後,它看起來就像是:numpy matrix沒有完全轉置
[ '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個長度爲100個核苷酸的DNA序列(A,C,T和G)。 100個核苷酸後用「\ n」分隔。第一線看起來像:
CCCTAAACCCTAAACCCTAAACCCTAAACCTCTGAATCCTTAATCCCTAAATCCCTAAATCTTTAAATCCTACATCCATGAATCCCTAAATACCTAATTC 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個點只是演示文稿(防止在屏幕上打印巨大的矩陣) – itai
你認爲'str(x)'是一個大矩陣嗎? – Alan
@itai:謝謝,但我忘了提及這不是屏幕上顯示的內容。這是temp2.txt文件的內容。 temp2.txt的大小隻有2KB,這也說明裏面沒有其他東西。 – saanasum