如何在python中以txt文件保存大型数组

如何在python中以txt文件保存大型数组,python,arrays,Python,Arrays,我有二维阵列: import numpy as np output = np.array([1,1,6])*np.arange(6)[:,None]+1 output Out[32]: array([[ 1, 1, 1], [ 2, 2, 7], [ 3, 3, 13], [ 4, 4, 19], [ 5, 5, 25], [ 6, 6, 31]]) 我试图使用np.savetxt('file1.txt

我有二维阵列:

import numpy as np

output = np.array([1,1,6])*np.arange(6)[:,None]+1

output
Out[32]: 
array([[ 1,  1,  1],
       [ 2,  2,  7],
       [ 3,  3, 13],
       [ 4,  4, 19],
       [ 5,  5, 25],
       [ 6,  6, 31]])
我试图使用
np.savetxt('file1.txt',output,fmt='%10d')
我只得到一行结果

如何将其保存在txt文件中,类似于:

        x   y    z 
        1   1    1
        2   2    7
        3   3   13
        4   4   19
        5   5   25
        6   6   31
3个独立的列,每列都有名称(x、y、z)

请注意:原始数组太大(40000000行和3列),我使用的是Python 3.6
我在和中尝试了这些解决方案,但它对我不起作用

Noor,让我猜猜-您正在使用windows记事本查看文件

我使用记事本+,它足够聪明,可以理解Unix样式的行尾,在通过
np.savetxt()
创建文件时(默认情况下)使用这些行尾,即使在windows下操作也是如此

调用
savetxt
时,可能需要显式指定
newline=“\r\n”

np.savetxt('file1.txt', output, fmt='%10d' ,header= "       x          y          z", newline="\r\n")
Doku:


我不确定您的数据,但是:

import numpy as np

output = np.array([1,1,6])*np.arange(60)[:,None]+1

print(output)


np.savetxt('file1.txt', output, fmt='%10d' ,header= "       x          y          z")
生成此输出:

#        x          y          z
         1          1          1
         2          2          7
         3          3         13 
       === snipped a few lines ===
        58         58        343
        59         59        349
        60         60        355
对我来说

  • 对于np.arange(1000000)来说,它大约32MB大,格式类似

  • 对于np.arange(10000000)来说,其大小约为322MB,格式类似

1+Gb就更接近了


我没有考虑每个数字固定的10个字符的间距,我的错。

Noor,让我猜猜,你是在用windows记事本查看文件吗

我使用记事本+,它足够聪明,可以理解Unix样式的行尾,在通过
np.savetxt()
创建文件时(默认情况下)使用这些行尾,即使在windows下操作也是如此

调用
savetxt
时,可能需要显式指定
newline=“\r\n”

np.savetxt('file1.txt', output, fmt='%10d' ,header= "       x          y          z", newline="\r\n")
Doku:


我不确定您的数据,但是:

import numpy as np

output = np.array([1,1,6])*np.arange(60)[:,None]+1

print(output)


np.savetxt('file1.txt', output, fmt='%10d' ,header= "       x          y          z")
生成此输出:

#        x          y          z
         1          1          1
         2          2          7
         3          3         13 
       === snipped a few lines ===
        58         58        343
        59         59        349
        60         60        355
对我来说

  • 对于np.arange(1000000)来说,它大约32MB大,格式类似

  • 对于np.arange(10000000)来说,其大小约为322MB,格式类似

1+Gb就更接近了


我没有考虑每个数字固定10个字符的间距,我的错。

这些解决方案在哪些方面失败了?假设每个字符1字节,数据的40mio*3*3个字符和间距大约为350mb—这不是一个太大的文件。@PatrickArtner:但是如果我们使用文本,它会使用分隔符(制表符和新行)和一些数据(例如浮点)可使用约10-20位数字。该数字较大,但不可用big@WillemVanOnsem当然,他的解调数据在99以下的整数范围内,我将其四舍五入;)只是想了解一下他的问题,这些解决方案在哪些方面会失败?假设每个字符有一个字节,那么40mio*3*3个字符的数据和间距大约为350mb—这不是一个太大的文件。@PatrickArtner:但如果我们使用文本,它会使用分隔符(制表符和新行)和一些数据(例如浮点)可使用约10-20位数字。该数字较大,但不可用big@WillemVanOnsem当然,他的解调数据在99以下的整数范围内,我将其四舍五入;)只是想了解一下他的问题谢谢Patrick Artner,你说得对,Notepad++和EmEditor,它们都以列和列的形式显示数组rows@Noor-指定使用的换行符和windows样式-将40.000.000字节添加到总文件大小;)谢谢,Patrick Artner,你说得对,Notepad++和EmEditor,它们都以列和列的形式显示数组rows@Noor-指定使用的换行符和windows样式-将40.000.000字节添加到总文件大小;)