将M numpy数据元素写入每行包含N个元素的文件

时间:2015-01-09 00:23:58

标签: python-2.7 numpy pandas

我有一个大小为M的numpy数组,想要将所有这些元素写入文本文件 每行只写N个元素(N 我们可以拥有:

2.000E-3   4.000E-4   6.4000E-5
7.500E-3   4.100E-4   6.4700E-1
2.100E-3   4.200E-4(no newline)

当数字结束时,我必须开始以类似的格式写另一个数字。我还需要处理N = 1和M = 1的情况。

2.000E-3(no new line)

或M< N案例:

2.00E-3   4.000E-4(no newline)

所有元素都是浮点数,必须以科学格式编写,并带有四个空格的分隔符(该数字可能会有所不同)。

1 个答案:

答案 0 :(得分:0)

如果您的阵列不是很大,您可能能够围绕此解决方案:

import numpy as np

def output_array(a, m):
    n = len(a)
    n_mod_m = n % m
    if n <= m:
        last_row = a
        rows = []
    elif n_mod_m:
        last_row = a[-(n_mod_m):]
        rows = a[:-n_mod_m].reshape(n//m,m)
    else:
        last_row = a[-m:]
        rows = a[:-m].reshape(n-1,m)

    def s_row(row):
        return '   '.join(['{:8.3E}'.format(n) for n in row])

    if len(rows):
        print '\n'.join([s_row(row) for row in rows])
    print s_row(last_row),

a = np.array([0.002,0.0004,0.000064,0.0075, 0.00041,0.647,0.0021,0.00042])
output_array(a,3)
print '(no newline)'
output_array(a[:1],1)
print '(no newline)'

output_array(a[:2],4)
print '(no newline)'

产生:

2.000E-03   4.000E-04   6.400E-05
7.500E-03   4.100E-04   6.470E-01
2.100E-03   4.200E-04 (no newline)

2.000E-03 (no newline)

2.000E-03   4.000E-04 (no newline)