Посмотрите, что вы пытаетесь сохранить:
In [457]: arr = np.c_[rows, value]
In [458]: arr
Out[458]:
array([['a', '0.5798052037530684', '0.340056048668929',
'0.9826015148933265'],
['b', '0.686642341561269', '0.22840250256173122',
'0.874930037338561'],
['c', '0.38991473280876576', '0.1744123512308029',
'0.7399608481535285']], dtype='<U32')
С помощью этой простой укладки столбцов вы создали массив строк. Единственный способ форматирования - это %s
.
Вместо этого вам нужно создать структурированный массив:
Для этого я могу создать список кортежей и соответствующий dtype.
Моя первая попытка - чистая, но savetxt не может обработать вложенный список лучше:
In [460]: arr = np.array(list(zip(rows, value)), 'U3,3f')
In [461]: arr
Out[461]:
array([('a', [0.5798052 , 0.34005606, 0.9826015 ]),
('b', [0.68664235, 0.2284025 , 0.87493 ]),
('c', [0.38991472, 0.17441235, 0.73996085])],
dtype=[('f0', '<U3'), ('f1', '<f4', (3,))])
Вместо этого нам нужны отдельные поля для каждого значения с плавающей запятой:
In [462]: arr = np.array(list(zip(rows, *value)), 'U3,f,f,f')
In [463]: arr
Out[463]:
array([('a', 0.5798052 , 0.68664235, 0.38991472),
('b', 0.34005606, 0.2284025 , 0.17441235),
('c', 0.9826015 , 0.87493 , 0.73996085)],
dtype=[('f0', '<U3'), ('f1', '<f4'), ('f2', '<f4'), ('f3', '<f4')])
Теперь мы можем использовать ваш fmt
:
In [464]: np.savetxt('test.txt', arr, fmt='%s %.2f %.2f %.2f')
In [465]: cat test.txt
a 0.58 0.69 0.39
b 0.34 0.23 0.17
c 0.98 0.87 0.74
Ooops - это транспонировало массив value
- я должен был использовать:
arr = np.array(list(zip(rows, *value.T)), 'U3,f,f,f')
Другой вариант - создать массив dtype объекта:
In [466]: M = np.zeros((3,4),object)
In [467]: M[:,0] = rows
In [468]: M[:,1:] = value
In [469]: M
Out[469]:
array([['a', 0.5798052037530684, 0.340056048668929, 0.9826015148933265],
['b', 0.686642341561269, 0.22840250256173122, 0.874930037338561],
['c', 0.38991473280876576, 0.1744123512308029, 0.7399608481535285]],
dtype=object)
In [470]: np.savetxt('test.txt', M, fmt='%s %.2f %.2f %.2f')
In [471]: cat test.txt
a 0.58 0.34 0.98
b 0.69 0.23 0.87
c 0.39 0.17 0.74