2016-06-01 2 views
0

파일을 반복하고 각 파일에 대해 4000+ (고정 숫자) 기능의 목록을 계산합니다. 이러한 기능은 함수에 의해 계산되고 다음과 같이 반환됩니다. numpy.array파이썬에서 csv에 쓸 때 숫자를 제한합니다.

파일 당 한 줄 (각 ​​줄은 4000+ 개 요소가있는 numpy.array) 인 CSV 파일을 작성하려고합니다.

현재 csv 파이썬 라이브러리를 사용하고 있으며 내 배열이 반올림 되어도 (np.around 덕택에) CSV 파일에 숫자가 많은 숫자가 포함되어 있습니다. 0,302499999999999 대신

0,3025의 난이 파이썬에서 floating points limitations에서 올 수 있습니다 알고 있지만, 나는이 문제를 방지 할 수있는 방법 (문자열로 작성하여?) 출력 파일이 있는지 알고 싶었다.

import numpy as np 
import csv 

for i in range(10) : 
    row = np.around(np.random.random(4000), decimals=5) 

    with open('output.csv', "ab") as fp: 
     wr = csv.writer(fp, dialect='excel') 
     wr.writerow(row) 

답변

3

당신은이 같은 numpy.savetxt()를 사용할 수 있습니다 : 아래의 코드

샘플 문제를 재현하는

import numpy as np 

with open('output.csv', 'w') as fh: 
    for i in range(10): # loop over features 
     row = np.random.random(4000) 
     np.savetxt(fh, row.reshape(1, -1), fmt='%.5e', delimiter=',') 
+0

감사하고,'a'' 모드는'np.savetxt에 대한이 '? 귀하의 대안을 사용하여 나는 CSV에서 마지막'행'만 볼 수 있습니다. CSV는 마치'csv' 라이브러리에서''w ''모드를 사용하는 것처럼 쓰여집니다. – Julian

+0

마지막으로'with open ('output.csv', "ab")를 fp로 사용하여 해결했습니다 : np.savetxt fp, row.reshape (1, row.shape [0]), fmt = '%. 5e', 구분 기호 = ',')'. 감사 ! – Julian

+1

@ Julian : 유스 케이스에 더 잘 맞도록 내 대답을 업데이트했습니다. – fmarc

관련 문제