2013-02-11 2 views
0

Я хочу записать некоторые случайные числа в выходной файл ascii. я генерировать номера с NumPy, поэтому номера хранятся в numpy.arrayЗапись вывода ascii из массивов numpy

import numpy as np 
random1=np.random.uniform(-1.2,1.2,7e6) 
random2=... 
random3=... 

Все три массива имеют одинаковый размер. Я использовал стандартный вывод файла, но это очень медленно. Всего около 8000 линий за 30 мин. Это может быть, потому что я перебираю три больших массива.

fout1 = open("output.dat","w") 

for i in range(len(random1)): 
    fout1.write(str(random1[i])+"\t"+ str(random2[i])+"\t"+ str(random3[i])+"\n") 
fout1.close() 

я просто использовал print str(random1[i])+"\t"+ str(random2[i])+"\t"+ str(random3[i]) и свалил все в файле usind оболочки ./myprog.py > output.dat, который, кажется, немного быстрее, но все-таки я не доволен скоростью вывода.

Любые рекомендации действительно приветствуются.

ответ

0

Я предполагаю, что диск io является самой дорогой операцией, которую вы делаете. Вы могли бы попытаться создать свой собственный буфер, чтобы справиться с этим, вместо того чтобы писать каждую строку в каждом буфере цикла, скажем, 100 строк и записать их в один большой блок. Затем поэкспериментировать с этим и посмотреть, что самый benficial размер буфера

4

Вы пробовали

random = np.vstack((random1, random2, random3)).T 
random.savetxt("output.dat", delimiter="\t") 
+0

спасибо за хорошую подсказку. Любая рекомендация, как я ограничиваю «random1, random2, random3» между «\ t», как в моем примере? – madzone

+0

Вы пробовали просить дядю [google] (https://www.google.ch/search?q=numpy+savetx)? –

+0

@madzone Используйте аргумент 'delimiter': [' savetext' docs] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html) – Jaime

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