Wysłałem to pytanie, ponieważ zastanawiałem się, czy zrobiłem coś strasznie złego, aby uzyskać ten wynik.Numpy ładowanie csv Zbyt powolne w porównaniu do Matlab
Mam plik CSV średniej wielkości i próbowałem użyć numpy do załadowania pliku. Dla ilustracji, zrobiłem plik przy użyciu Pythona:
import timeit
import numpy as np
my_data = np.random.rand(1500000, 3)*10
np.savetxt('./test.csv', my_data, delimiter=',', fmt='%.2f')
A potem próbowałem dwie metody: numpy.genfromtxt, numpy.loadtxt
setup_stmt = 'import numpy as np'
stmt1 = """\
my_data = np.genfromtxt('./test.csv', delimiter=',')
"""
stmt2 = """\
my_data = np.loadtxt('./test.csv', delimiter=',')
"""
t1 = timeit.timeit(stmt=stmt1, setup=setup_stmt, number=3)
t2 = timeit.timeit(stmt=stmt2, setup=setup_stmt, number=3)
A wynik pokazuje, że t1 = 32,159652940464184, t2 = 52.00093725634724.
Jednak, gdy próbowałem za pomocą Matlaba:
tic
for i = 1:3
my_data = dlmread('./test.csv');
end
toc
Wynik pokazuje: Czas jest 3,196465 sekundy.
Rozumiem, że mogą występować pewne różnice w szybkości ładowania, ale:
- Jest to o wiele więcej niż się spodziewałem;
- Czy to nie jest tak, że plik np.loadtxt powinien być szybszy niż np.genfromtxt?
- Nie próbowałem jeszcze modułu Pythona csv, ponieważ ładowanie pliku csv jest naprawdę częstą czynnością, którą robię, a także z modułem CSV, kodowanie jest trochę pełne gadek ... Ale z chęcią wypróbuję, jeśli to jest jedyny sposób. Obecnie jestem bardziej zaniepokojony tym, czy robię coś złego.
Wszelkie dane wejściowe będą mile widziane. Z góry dziękuję!
Dziękuję bardzo! Pd.read_csv działa doskonale dla mnie - w rzeczywistości skończyło się tylko w połowie czasu, który zajęło MATLAB! A także dzięki za dwie inne bardzo pouczające metody o mniejszej wadze. –