1

I have been trying to save numpy array to a file without brackets and white spaces at the beginning of each line. Unfortunately the last one does not work. Array:

[[ 6.         -2.86751284 -0.35808319  1.79360812]
 [ 6.         -1.59351284 -0.02808319 -0.47039188]
 [ 6.          0.51848716  0.21791681  0.17060812]
 [ 6.         -1.63251284 -0.12208319  0.90460812]
 [ 6.         -0.26051284  0.03991681  1.33660812]
 [ 6.          1.87948716  0.43391681  0.21960812]
 [ 6.          2.52048716  0.45191681  1.44760812]
 [ 6.          0.40448716  0.04591681  2.58360812]
 [ 6.          1.81248716  0.30391681  2.62260812]]

Code:

f = open('result.txt','a')
f.write(str(geometry.shape[0]))
f.write(re.sub('[\[\]]', '', np.array_str(geometry))).lstrip() 
f.write('\n')
f.close()

How can I fix it up?

kmario23
  • 42,075
  • 12
  • 123
  • 130
Monica
  • 958
  • 1
  • 12
  • 24
  • See also, [this question](http://stackoverflow.com/questions/6081008/dump-a-numpy-array-into-a-csv-file/30189734). – aghast Mar 31 '17 at 05:32
  • Probably a stupid question... But have you also considered storing you data in a (cleaver) binary format? E.g. using `numpy.savez`, `scipy.io.savemat`, or the more involved `netCDF` or `hdf5` libraries. – Tom de Geus Mar 31 '17 at 07:12

2 Answers2

1

For more controls about how your text should be use np.savetxt with additional parameters as required:

arr = np.ones((3, 3))
with open("test.txt" , 'wb') as f:
    np.savetxt(f, arr, delimiter=' ', newline='\n', header='', footer='', comments='# ')
kmario23
  • 42,075
  • 12
  • 123
  • 130
0

What about this option:

a = np.array([[ 6, -2.86751284, -0.35808319,  1.79360812],
[ 6., -1.59351284, -0.02808319, -0.47039188],
[ 6., 0.51848716,  0.21791681,  0.17060812],
[ 6., 1.63251284, -0.12208319,  0.90460812],
[ 6., -0.26051284,  0.03991681,  1.33660812],
[ 6., 1.87948716,  0.43391681,  0.21960812],
[ 6., 2.52048716,  0.45191681,  1.44760812],
[ 6., 0.40448716,  0.04591681,  2.58360812],
[ 6., 1.81248716,  0.30391681,  2.62260812]], np.float32)

np.savetxt('outfile.txt', a)

no unnecessary white space and no brackets, but formatted in one line.

mrks
  • 119
  • 1
  • 12