python – 如何写一个多维数组到文本文件?

在另一个问题,其他用户提供了一些帮助,如果我可以提供我遇到麻烦的阵列。但是,我甚至在一个基本的I / O任务失败,如写一个数组到文件。

任何人都可以解释什么样的循环,我需要写一个4x11x14 numpy数组到文件?

这个数组包含四个11 x 14的数组,所以我应该格式化一个很好的换行符,使文件的阅读更容易在别人。

编辑:所以我试过numpy.savetxt函数。奇怪的是,它给出以下错误:

TypeError: float argument required, not numpy.ndarray

我假设这是因为该函数不工作与多维数组?任何解决方案,我想他们在一个文件?

如果你想写它到磁盘,以便它可以很容易读回作为一个numpy数组,看看numpy.save. pickling它将工作正常,但是对于大数组效率较低(你的不是,所以要么是完全精细)。

如果你想要它是人类可读的,看看numpy.savetxt

编辑:所以,似乎savetxt不是一个伟大的选项,具有> 2维的数组…但只是绘制一切出来,它的完整结论:

我只是意识到numpy.savetxt阻塞在ndarrays超过2维…这可能是设计,因为没有固有定义的方式来表示文本文件中的其他维度。

例如。这(二维数组)工作正常

import numpy as np
x = np.arange(20).reshape((4,5))
np.savetxt('test.txt', x)

虽然同样的事情会失败(有一个相当无意义的错误:TypeError:float参数required,而不是numpy.ndarray)3D数组:

import numpy as np
x = np.arange(200).reshape((4,5,10))
np.savetxt('test.txt', x)

一个解决方法是将3D(或更大)数组分割成2D切片。例如。

x = np.arange(200).reshape((4,5,10))
with file('test.txt', 'w') as outfile:
    for slice_2d in x:
        np.savetxt(outfile, slice_2d)

然而,我们的目标是明确的人类可读,同时仍然容易读回与numpy.loadtxt。因此,我们可以有点更冗长,并使用注释掉的行来区分切片。默认情况下,numpy.loadtxt将忽略以#开头的任何行(或由注释kwarg指定的任何字符)。 (这看起来更详细比它实际是…)

import numpy as np

# Generate some test data
data = np.arange(200).reshape((4,5,10))

# Write the array to disk
with file('test.txt', 'w') as outfile:
    # I'm writing a header here just for the sake of readability
    # Any line starting with "#" will be ignored by numpy.loadtxt
    outfile.write('# Array shape: {0}\n'.format(data.shape))

    # Iterating through a ndimensional array produces slices along
    # the last axis. This is equivalent to data[i,:,:] in this case
    for data_slice in data:

        # The formatting string indicates that I'm writing out
        # the values in left-justified columns 7 characters in width
        # with 2 decimal places.  
        np.savetxt(outfile, data_slice, fmt='%-7.2f')

        # Writing out a break to indicate different slices...
        outfile.write('# New slice\n')

这产生:

# Array shape: (4, 5, 10)
0.00    1.00    2.00    3.00    4.00    5.00    6.00    7.00    8.00    9.00   
10.00   11.00   12.00   13.00   14.00   15.00   16.00   17.00   18.00   19.00  
20.00   21.00   22.00   23.00   24.00   25.00   26.00   27.00   28.00   29.00  
30.00   31.00   32.00   33.00   34.00   35.00   36.00   37.00   38.00   39.00  
40.00   41.00   42.00   43.00   44.00   45.00   46.00   47.00   48.00   49.00  
# New slice
50.00   51.00   52.00   53.00   54.00   55.00   56.00   57.00   58.00   59.00  
60.00   61.00   62.00   63.00   64.00   65.00   66.00   67.00   68.00   69.00  
70.00   71.00   72.00   73.00   74.00   75.00   76.00   77.00   78.00   79.00  
80.00   81.00   82.00   83.00   84.00   85.00   86.00   87.00   88.00   89.00  
90.00   91.00   92.00   93.00   94.00   95.00   96.00   97.00   98.00   99.00  
# New slice
100.00  101.00  102.00  103.00  104.00  105.00  106.00  107.00  108.00  109.00 
110.00  111.00  112.00  113.00  114.00  115.00  116.00  117.00  118.00  119.00 
120.00  121.00  122.00  123.00  124.00  125.00  126.00  127.00  128.00  129.00 
130.00  131.00  132.00  133.00  134.00  135.00  136.00  137.00  138.00  139.00 
140.00  141.00  142.00  143.00  144.00  145.00  146.00  147.00  148.00  149.00 
# New slice
150.00  151.00  152.00  153.00  154.00  155.00  156.00  157.00  158.00  159.00 
160.00  161.00  162.00  163.00  164.00  165.00  166.00  167.00  168.00  169.00 
170.00  171.00  172.00  173.00  174.00  175.00  176.00  177.00  178.00  179.00 
180.00  181.00  182.00  183.00  184.00  185.00  186.00  187.00  188.00  189.00 
190.00  191.00  192.00  193.00  194.00  195.00  196.00  197.00  198.00  199.00 
# New slice

阅读它是非常容易,只要我们知道原始数组的形状。我们可以做numpy.loadtxt(‘test.txt’)。reshape((4,5,10))。作为一个例子(你可以在一行中做到这一点,我只是详细地说明事情):

# Read the array from disk
new_data = np.loadtxt('test.txt')

# Note that this returned a 2D array!
print new_data.shape

# However, going back to 3D is easy if we know the 
# original shape of the array
new_data = new_data.reshape((4,5,10))

# Just to check that they're the same...
assert np.all(new_data == data)
http://stackoverflow.com/questions/3685265/how-to-write-a-multidimensional-array-to-a-text-file

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 如何写一个多维数组到文本文件?