Документы для savetxt
говорить о fmt
опциях для комплексного массива.
Начиная с 1d массива:
In [17]: np.arange(5)+np.arange(5,0,-1)*1j
Out[17]: array([ 0.+5.j, 1.+4.j, 2.+3.j, 3.+2.j, 4.+1.j])
In [18]: arr = np.arange(5)+np.arange(5,0,-1)*1j
по умолчанию для записи чисел, один ()
строку в каждой строке. Чтение, что с loadtxt
(или genfromtxt
) будет проблемой. Он должен быть загружен как строка, а затем преобразован по строкам.
In [19]: np.savetxt('test.txt',arr)
In [20]: cat test.txt
(0.000000000000000000e+00+5.000000000000000000e+00j)
(1.000000000000000000e+00+4.000000000000000000e+00j)
(2.000000000000000000e+00+3.000000000000000000e+00j)
(3.000000000000000000e+00+2.000000000000000000e+00j)
(4.000000000000000000e+00+1.000000000000000000e+00j)
В нем говорится, что я могу указать формат для реальной и мнимой частей, и в этом случае он сохраняет его как 2 столбца. Это легко читать с loadtxt
.
In [21]: np.savetxt('test.txt',arr, fmt='%f %f')
In [22]: cat test.txt
0.000000 5.000000
1.000000 4.000000
2.000000 3.000000
3.000000 2.000000
4.000000 1.000000
In [23]: np.loadtxt('test.txt')
Out[23]:
array([[ 0., 5.],
[ 1., 4.],
[ 2., 3.],
[ 3., 2.],
[ 4., 1.]])
In [25]: np.loadtxt('test.txt').view(complex)
Out[25]:
array([[ 0.+5.j],
[ 1.+4.j],
[ 2.+3.j],
[ 3.+2.j],
[ 4.+1.j]])
С 2d комплексного массивом Мне нужно указать FMT для всех столбцов
In [28]: arr1=np.array((arr, arr*.1, arr+1))
In [29]: arr1
Out[29]:
array([[ 0.0+5.j , 1.0+4.j , 2.0+3.j , 3.0+2.j , 4.0+1.j ],
[ 0.0+0.5j, 0.1+0.4j, 0.2+0.3j, 0.3+0.2j, 0.4+0.1j],
[ 1.0+5.j , 2.0+4.j , 3.0+3.j , 4.0+2.j , 5.0+1.j ]])
In [33]: np.savetxt('test.txt',arr1, fmt=['%f %f']*5)
In [34]: cat test.txt
0.000000 5.000000 1.000000 4.000000 2.000000 3.000000 3.000000 2.000000 4.000000 1.000000
0.000000 0.500000 0.100000 0.400000 0.200000 0.300000 0.300000 0.200000 0.400000 0.100000
1.000000 5.000000 2.000000 4.000000 3.000000 3.000000 4.000000 2.000000 5.000000 1.000000
In [35]: np.loadtxt('test.txt').view(complex)
Out[35]:
array([[ 0.0+5.j , 1.0+4.j , 2.0+3.j , 3.0+2.j , 4.0+1.j ],
[ 0.0+0.5j, 0.1+0.4j, 0.2+0.3j, 0.3+0.2j, 0.4+0.1j],
[ 1.0+5.j , 2.0+4.j , 3.0+3.j , 4.0+2.j , 5.0+1.j ]])
Документов показывают длинную строку формата со всеми столбцами, но, видимо, список строк работает
In [36]: ['%f %f']*5
Out[36]: ['%f %f', '%f %f', '%f %f', '%f %f', '%f %f']
savetxt
присоединяется к этому списку с разделителем, чтобы сделать одну длинную строку формата.
In [37]: np.savetxt('test.txt',arr1, fmt=['%f %f']*5, delimiter=',')
In [38]: cat test.txt
0.000000 5.000000,1.000000 4.000000,2.000000 3.000000,3.000000 2.000000,4.000000 1.000000
...
Для loadtxt
разделителем между сложными частями и столбцов должен быть совместим:
In [39]: np.savetxt('test.txt',arr1, fmt=['%f %f']*5, delimiter=' ')
In [40]: cat test.txt
0.000000 5.000000 1.000000 4.000000 2.000000 3.000000 3.000000 2.000000 4.000000 1.000000
...
В целом, сохранение/загрузка поездка туда и обратно будет проще всего, если save
делается с нагрузкой совместимых форматов.