How to write a numpy matrix in a text file

Suppose I am getting a numpy matrix from some calculation. Here is my numpy matrix 'result1'::

    result1=
    [[   1.         0.         0.         0.00375   -0.01072   -0.      -1000.     ]
     [   2.         3.         4.         0.        -0.004    750.         0.     ]
     [   3.         3.         0.         0.         0.      -750.      1000.     ]]

Now I want to write this matrix in a text file named 'result.txt'. For this, I wrote the following code::

np.savetxt('result.txt', result1, fmt='%.2e')

But it is giving me all the elements of the matrix in one row.

    1.00e+00 0.00e+00 0.00e+00 3.75e-03 -1.07e-02 -1.14e-13 -1.00e+032.00e+00 3.00e+00 4.00e+00 0.00e+00 -4.00e-03 7.50e+02 0.00e+003.00e+00 3.00e+00 0.00e+00 0.00e+00 0.00e+00 -7.50e+02 1.00e+03

I want to write the matrix in the text file in the proper matrix format. How can I do this? I used keyword newline='n' or newline='',but the result is same.

Thanks in advance...

=======

This edited part is for @Warren

try this one:

>>> import numpy as np
>>> mat=np.matrix([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
>>> mat
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
>>> np.savetxt('text.txt',mat,fmt='%.2f')

in my text.txt file, I am getting:

1.00 2.00 3.004.00 5.00 6.007.00 8.00 9.00


像Francesco Nazzaro的回答,但有点不同以确保文件可以成功打开,请尝试:

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
mat = np.matrix(a)
with open('outfile.txt','wb') as f:
    for line in mat:
        np.savetxt(f, line, fmt='%.2f')

To recreate the shape, you need to save the shape when you save the file.

Try:

import numpy as np
import re

result=np.array([[1.,0.,0.,0.00375,-0.01072,-0.,-1000.,],
                 [2.,3.,4.,0.,-0.004,750.,0.],
                 [3.,3.,0.,0.,0.,-750.,1000.]])

with open('/tmp/test', 'w') as fout:
    fout.write(u'#'+'t'.join(str(e) for e in result.shape)+'n')
    result.tofile(fout)

with open('/tmp/test', 'rb') as f:
    line=f.readline().decode('ascii')
    if line.startswith('#'):
        shape=tuple(map(int, re.findall(r'(d+)', line)))
    else:
        raise IOError('Failed to find shape in file')    

    result2=np.fromfile(f)
    result3=result2.reshape(shape)

print(np.array_equal(result, result2))
# False
print(np.array_equal(result, result3))
# True

You can save the shape in some form in the file in oder to recreate the same shape. Make sure you do not forget the data at the beginning of the file however, since unlike np.loadtxt, lines starting with # are still considered data.


If you want to use only numpy :

import numpy as np

mat = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
with open('outfile.txt') as f:
    for line in mat:
        np.savetxt(f, line, fmt='%.2f')

and then

cat outfile.txt
1.00 2.00 3.00
4.00 5.00 6.00
7.00 8.00 9.00

Pandas has to_csv method:

import numpy as np
import pandas as pd

mat = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
dataframe = pd.DataFrame(data=mat.astype(float))
df.to_csv('outfile.csv', sep=' ', header=False, float_format='%.2f', index=False)

it has the same output:

cat outfile.csv
1.00 2.00 3.00
4.00 5.00 6.00
7.00 8.00 9.00
链接地址: http://www.djcxy.com/p/77884.html

上一篇: 工厂和服务有什么区别?

下一篇: 如何在文本文件中编写一个numpy矩阵