如何用这种格式用python写一个矩阵到文件?

时间:2016-02-03 09:47:21

标签: python-2.7 numpy scipy

我需要逐行写一个矩阵到这个格式为(i, j, a[i,j])的文件,但我不知道怎么弄它。我尝试使用:np.savetxt(f, A, fmt='%1d', newline='\n'),但它只写了矩阵值而不写i,j!

2 个答案:

答案 0 :(得分:1)

import numpy as np

a = np.arange(12).reshape(4,3)
a_with_index = np.array([idx+(val,) for idx, val in np.ndenumerate(a)])
np.savetxt('/tmp/out', a_with_index, fmt='%d')

写入/ tmp / out内容

0 0 0
0 1 10
0 2 20
1 0 30
1 1 40
1 2 50
2 0 60
2 1 70
2 2 80
3 0 90
3 1 100
3 2 110

答案 1 :(得分:0)

如果您的数组数据类型不是一种整数,那么您可能必须编写自己的函数来将其与索引一起保存,因为它们是整数。例如,

import numpy as np
def savetxt_with_indices(filename, arr, fmt):
    nrows, ncols = arr.shape
    indexes = np.empty((nrows*ncols, 2))
    indexes[:,0] = np.repeat(np.arange(nrows), ncols)
    indexes[:,1] = np.tile(np.arange(ncols), nrows)
    fmt = '%4d %4d ' + fmt
    flat_arr = arr.flatten()
    with open(filename, 'w') as fo:
        for i in range(nrows*ncols):
            print(fmt % (indexes[i, 0], indexes[i, 1], flat_arr[i]), file=fo)

A = np.arange(12.).reshape((4,3))
savetxt_with_indices('test.txt', A, '%6.2f')


   0    0   0.00
   0    1   1.00
   0    2   2.00
   1    0   3.00
   1    1   4.00
   1    2   5.00
   2    0   6.00
   2    1   7.00
   2    2   8.00
   3    0   9.00
   3    1  10.00
   3    2  11.00