2015-01-13 1 views
3

Я написал сценарий питона,Numpy.savetxt, чтобы сохранить строку и всплывают в то же время и поддерживать точность поплавка

import numpy 

a = 8.3 
b = 8.29993191 
c = abs(a - b) 
print c 
d = numpy.array(c) 
e = ['value'] 
f = numpy.vstack((e, d)) 
print f 
g = ['valuesssssssssssss'] 
h = numpy.vstack((g, d)) 
print h 

numpy.savetxt('2k.csv', f, '%s', delimiter = ',') 

А вот выход,

6.8090000001e-05 
[['value'] 
['6.809']] 
[['valuesssssssssssss'] 
['6.8090000001e-05']] 

Видимо, точность of float, который я хочу сохранить в файл csv, зависит от длины строки, потому что мне нужно использовать '% s' для сохранения строки и float одновременно.

Как решить эту проблему?

ответ

1

На этой линии:

f = numpy.vstack((e, d)) 

vstack является принуждая тип d к типу e. Вы можете проверить это, напечатав f.dtype.

Вы должны вместо этого построить f как этот

f = np.zeros(1,dtype=('|S5, float64')) 
f[0] = e[0],d 

Обратитесь к документации на структурированных массивов специально для пункта this, если вы не понимаете линию выше.

На момент печати f вы можете выбрать другой спецификатор формата. С 15 цифрами и научной нотации вы можете пойти:

np.savetxt('2k.csv', f, fmt = ('%s','%.15e'),delimiter = ',') 

Полученный файл

# cat 2k.csv 
value,6.809000000096432e-05 

Для сохранения номера под завязку, использовать пользовательский формат для savetxt:

np.savetxt('2k.csv', f, fmt = '%s\n%.15e') 

, который выдает:

# cat 2k.csv 
value 
6.809000000096432e-05 
+0

Я пробовал свой код, numpy.savetxt ('2k.csv', f, fmt = ('% s', '%. 15e'), delimiter = ','), но получил эту ошибку, AttributeError: fmt has неправильная форма. ('% s', '% .15e') – Heinz

+0

Приведенный выше код работает. Я отредактировал ответ, чтобы точно соответствовать шагу для инициализации 'f'. Он работает сейчас? – gg349

+0

Спасибо, ваш код действительно работал, но результат не тот, который я хочу, то есть float ** под ** строку. – Heinz

Смежные вопросы