簡體   English   中英

讀取,轉置大矩陣並保存

[英]Read, Transpose Big Matrix and Save

您有一個很大的矩陣保存在一個csv文件中。 您想對其進行轉置並將其保存到另一個文件中。 您不能一次將所有數據加載到內存中。 你怎么能這樣做?

我認為我們可以從文件中讀取一行並將其轉置為一列,然后將該列寫入文件中。 讀取行並將其轉換為列是可以的,但我不知道如何逐列寫入文件。 任何人都可以實施?

無論如何,我會給你一個提示:

ol = or x C + oc (consider arr[or][oc])

它將被移到轉置矩陣中的新位置nl,例如nl = A [nr] [nc]或用C / C ++術語表示

nl = nr x R + nc (R-列數,C是矩陣轉置時的行數)nr = oc且nc =或,因此將其替換為nl,

nl = oc x R + or

ol     = or x C     + oc
ol x R = or x C x R + oc x R
       = or x N     + oc x R    (from the fact R * C = N)
       = or x N     + (nl - or) --- from [eq 1]
       = or x (N-1) + nl

要么,

nl = ol x R - or x (N-1)

nl和ol的值永遠不會超過N-1,因此考慮到兩邊都被(N-1)取模,基於同余性,我們得到以下結果:

nl mod (N-1) = (ol x R - or x (N-1)) mod (N-1)
             = (ol x R) mod (N-1) - or x (N-1) mod(N-1)
             = ol x R mod (N-1), since second term evaluates to zero
nl = (ol x R) mod (N-1), since nl is always less than N-1

因此,現在您可以一次讀取一個元素,並將其放在相應轉置矩陣中的正確位置。

來自https://github.com/micans/reaper的程序“ transpose”在這里可能會有所幫助。 它將矩陣作為單個字符串加載到內存中,然后將轉置的結果寫入文件而不在內存中創建。 因此,內存開銷絕對限於磁盤上矩​​陣的大小(未壓縮)。 該程序可以讀取/寫入壓縮數據,並且行和單元格分隔符是可自定義的(默認為'\\ n'和'\\ t')。 在60460 x 4671矩陣(壓縮大小為125M)上進行的簡單測試中,它使用的內存比Python + pandas少20倍,比R少12倍,在兩種情況下都快13倍。 一個好處是不會發生數據舍入或截斷的情況,每個字段都將按字節順序復制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM