2013-07-01 2 views
0

Мой код вычисляет моменты Hu на изображении .tiff. Мне нужно удалить экспоненциальной (научной) нотации на выходе, выглядит как:Как удалить экспоненциальные (научные обозначения) при печати NumPy массива?

2.84737313535e-05
1.25610416364e-09
1.25419253619e-09
1.57419718046e-18
6.69242940524e-12
4.17512050223e-22

def humoments(self):    #function for HuMoments computation 
    for filename in glob.iglob ('*.tif'): 
     img = cv.LoadImageM(filename, cv.CV_LOAD_IMAGE_GRAYSCALE) 
     cancer = cv.GetHuMoments(cv.Moments(img)) 
     #arr = cancer 
     arr = numpy.array([cancer]) 
    with open('hu.csv', 'wb') as csvfile: 
     for elem in arr.flat[:50]: 
    #print('{}\t'.format(elem)) #this code puts the result to console 
     writer = csv.writer(csvfile, delimiter=' ', quotechar='|',  quoting=csv.QUOTE_MINIMAL) 
     writer.writerow([('{}\t'.format(elem))]) 

Спасибо за помощь мне

ответ

1

Изменить

writer.writerow([('{}\t'.format(elem))]) 

Для

writer.writerow([('{0:.10f}\t'.format(elem))]) 

Here вы можете найти объяснение строки форматирования в Python.

1

Вместо использования CSV для создания файла, вы могли бы назвать np.savetxt:

>>> import numpy as np 
>>> arr = np.array([2.84e-05, 6.69e-12]) 
>>> np.savetxt('/tmp/out', arr, fmt='%.14f') 

производит

0.00002840000000 
0.00000000000669 

Так что в вашем случае, чтобы написать первые 50 элементов использования обр:

np.savetxt('hu.csv', arr.flat[:50], fmt='%.14f') 

вместо

with open('hu.csv', 'wb') as csvfile: 
    for elem in arr.flat[:50]: 
#print('{}\t'.format(elem)) #this code puts the result to console 
    writer = csv.writer(csvfile, delimiter=' ', quotechar='|',  quoting=csv.QUOTE_MINIMAL) 
    writer.writerow([('{}\t'.format(elem))]) 

Примечание: В отличие от вашего исходного кода np.savetxt не будет помещать вкладку в конце каждой строки. Но тогда, зачем вам это нужно?