2016-08-25 8 views
5

Chcę pisać duże ilości danych w języku Julia. Dane są generowane, a następnie przechowywane na listach. Pseudokod jest:Najbardziej efektywny sposób zapisu danych do pliku csv z Julią

f = open("test.csv", "w") 

for i = 1:3 
    position = [j for j = i:(i + 10) ] 
    string_position = string(position) 
    n = length(string_position) 
    write(f, string_position[2:(n - 1)]*"\n") 
end 

close(f) 

Jednak wydaje się nieefektywne, aby uzyskać długość ciągów w każdej iteracji, a następnie usunąć pierwszy i ostatni element łańcucha.

Czy jest szybszy sposób?

Odpowiedz

11

Jedna prosta optymalizacja jest użycie

write(f, string_position[2:(n - 1)], "\n") 

zamiast *. Zapisuje on dwa obiekty kolejno, zamiast najpierw je łączyć, a następnie zapisywać wynik.

Może być również szybsze użycie SubString, która odwołuje się do części innego ciągu w miejscu bez kopiowania.

Zasadniczo można również szybciej unikać tworzenia pośrednich ciągów. Zamiast najpierw tworzyć ciąg, a następnie go pisać, napisz poszczególne elementy. Na przykład

for item in position 
    print(f, item, ",") 
end 
print(f, "\n") 

Dodam, że istnieje writecsv funkcja w bibliotece standardowej, że robi to za ciebie.

Powiązane problemy