2013-06-24 3 views
2

У меня есть numpy.ndarray, в котором я заменяю все значения точными поплавками на 6 цифр. В то время, когда я сделать задание я сделать STH так:Несоответствие формата с ndarray

data[i][j]=format(value,'6.f') 

data[i][j] если я распечатать сейчас с print data[i][j] имеет этот формат 234.434567.

Когда цикл закончен, и я сделать print data Теперь data[i][j] есть это формат 2.34434567e+something для всех значений

Как я могу заставить ndarray иметь формат, который я хочу, когда я его распечатаю?

+1

На стороне примечания, если вы имеете дело с массивами numpy, нет необходимости использовать 'data [i] [j]'. Вместо этого используйте 'data [i, j ]'. Кроме того, вы пытаетесь назначить _string_ как элемент в массиве с плавающей запятой. Его бросают в поплавок за кулисами, но вам действительно следует избегать этого. –

+0

@JoeKington объясните мне, как я должен выполнять назначение и почему я должен его избегать. – curious

+1

Если вы работаете с float, просто назначьте его (не конвертируйте его в строку с помощью 'format'). Если вы работаете со строкой, явным образом отбрасываю ее на float. Прямо сейчас вы берете значение с плавающей запятой и меняете его на строку (теряете точность), а затем меняете ее обратно на float. Кажется, что вы хотите сделать это просто 'data [i, j] = value'. –

ответ

3
import numpy as np 

data = np.array(
    [ 
     [1.23456789, 2.34567890], 
     [0.00000001, 0.22222222] 
    ] 
) 


print data 

--output:-- 
[[ 1.23456789e+00 2.34567890e+00] 
[ 1.00000000e-08 2.22222220e-01]] 



np.set_printoptions(
    precision=6, 
    suppress=True, #get rid of scientific notation(e.g. e+00) 
) 

print data 

--output:-- 
[[ 1.234568 2.345679] 
[ 0.  0.222222]] 
+0

+1 (Вы избили меня до этого!) Также может быть полезно добавить ссылку на документацию 'set_printoptions': http://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html –

+0

Есть ли аналогичная опция, которая указала бы, сколько цифр точности следует учитывать при манипулировании ndarrays? – curious

+3

@curious - Вы, кажется, путаетесь с разницей между строками и поплавками (в любом случае, на основе кода в вашем вопросе). Численные массивы - это float, int и т. Д. Если это массив с плавающей запятой, он будет использовать математику с плавающей запятой. Если это целочисленный массив, он будет использовать целочисленную математику. Для массивов с плавающей запятой (и целочисленных) существуют разные битовые глубины (например, 32-разрядные, 64-разрядные и т. Д.). Они контролируют точность результата, но математика с плавающей запятой не имеет прямого отношения к «цифрам точности». Это верно на любом языке программирования. –