Python:将具有不同维度的numpy数组写入txt文件

时间:2017-02-24 19:50:58

标签: python arrays numpy

我有两个带有尺寸(81,5)和(3196,7)的numpy数组,我需要写入csv文件。实际所需的输出看起来像这样:

81 #This is the len() of the first array
1    2    3    4    5
.
.
81   2    3    4    5
#skip a line
3196 #len() of the second array
1    2    3    4    5    6    7
.
.
3196 2    3    4    5    6    7

列中的数字是某些数据(实际上不是123456)。 通过用np.NaN填充空格然后用空格替换NaN值,我能够或多或少地将Frankenstein放在一个数组中。但是我无法使用以下内容输出文件:

np.savetxt(r'path/sample.Data.srv', data, delimiter = '\t', fmt='%.5f')

我收到错误的地方:

  

数组dtype(' object')和格式说明符('%。5f%.5f%.5f%.5f%.5f%.5f%.5f')之间不匹配

可能是因为空格('')是一个字符串。 FMT ='%5S'有效,但我需要数字是浮点数。我仍然是python的新手,并且一直使用np.savetxt()因为我以前从未使用过具有不同形状的数组,也不熟悉其他编写txt文件的选项。任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

听起来像是拼凑了一个看起来像的数组(用空格代替None):

In [74]: data
Out[74]: 
array([[1.0, 1.0, 1.0, 1.0, 1.0, None, None],
       [1.0, 1.0, 1.0, 1.0, 1.0, None, None],
       [1.0, 1.0, 1.0, 1.0, 1.0, None, None],
       [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
       [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
       [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
       [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
       [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]], dtype=object)

但错误更多与对象dtype

有关
In [75]: np.savetxt('test.txt', data, fmt='%.5f')
TypeError: Mismatch between array dtype ('object') and format specifier ('%.5f %.5f %.5f %.5f %.5f %.5f %.5f')

使用更通用的%s格式,这有效:

In [76]: np.savetxt('test.txt', data, fmt='%s')
In [77]: cat test.txt
1.0 1.0 1.0 1.0 1.0 None None
1.0 1.0 1.0 1.0 1.0 None None
1.0 1.0 1.0 1.0 1.0 None None
0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0

但这是我想到的多个savetxt:

In [79]: with open('test.txt', 'wb') as f:
    ...:     np.savetxt(f, d[0], fmt='%.5f')
    ...:     f.write(b'\n')
    ...:     np.savetxt(f, d[1], fmt='%.5f')
    ...:     
In [80]: cat test.txt
1.00000 1.00000 1.00000 1.00000 1.00000
1.00000 1.00000 1.00000 1.00000 1.00000
1.00000 1.00000 1.00000 1.00000 1.00000

0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000