python numpy.append と listのappendの比較
numpy.appendが遅いというのを見たので、計算してみました。
import numpy as np
import time
import pandas as pd
data_nums = np.logspace(1, 5, 5)
# [1.e+01 1.e+02 1.e+03 1.e+04 1.e+05]
data_nums = data_nums.astype("int64")
df = pd.DataFrame(
index=range(len(data_nums)), columns=["data_num", "python_list", "numpy_ndarray"]
)
print(df)
df.loc[:, "data_num"] = data_nums
print(df)
for data_num in data_nums:
df_index = df.index[df["data_num"] == data_num].to_list()
print(f"--------------------------")
# print(f"data_num_index : {df_index}")
print(f"data_num : {data_num}")
print(f"--------------------------")
# using python list append
start_time_python_list = time.perf_counter()
data_numpy_append = np.empty(0)
data_numpy_append_list = data_numpy_append.tolist() # numpy ndarray -> python list
for i in range(data_num): # append data
data_numpy_append_list.append(i)
data_numpy_append_2 = np.asarray(
data_numpy_append_list
) # python list -> numpy ndarray
# print(data_numpy_append_2)
end_time_python_list = time.perf_counter()
elapsed_time_python_list = end_time_python_list - start_time_python_list
print(f"python_list : {elapsed_time_python_list} [sec]")
df.at[df.index[df_index[0]], "python_list"] = elapsed_time_python_list
# using numpy ndarray append
start_time_numpy = time.perf_counter()
data_numpy_append_ = np.empty(0)
for i in range(data_num): # append data
data_numpy_append_ = np.append(data_numpy_append_, i)
# print(data_numpy_append_)
end_time_numpy = time.perf_counter()
elapsed_time_numpy = end_time_numpy - start_time_numpy
print(f"numpy_ndarray : {elapsed_time_numpy} [sec]")
df.at[df.index[df_index[0]], "numpy_ndarray"] = elapsed_time_numpy
print(f"")
print(df)
結果
listに変換したほうが早い。
--------------------------
data_num : 10
--------------------------
python_list : 1.7700018361210823e-05 [sec]
numpy_ndarray : 7.660000119358301e-05 [sec]
--------------------------
data_num : 100
--------------------------
python_list : 3.930006641894579e-05 [sec]
numpy_ndarray : 0.0005637999856844544 [sec]
--------------------------
data_num : 1000
--------------------------
python_list : 0.00019459996838122606 [sec]
numpy_ndarray : 0.005826800013892353 [sec]
--------------------------
data_num : 10000
--------------------------
python_list : 0.001879699993878603 [sec]
numpy_ndarray : 0.06156469997949898 [sec]
--------------------------
data_num : 100000
--------------------------
python_list : 0.01734230003785342 [sec]
numpy_ndarray : 2.0233694999478757 [sec]
data_num python_list numpy_ndarray
0 10 0.000018 0.000077
1 100 0.000039 0.000564
2 1000 0.000195 0.005827
3 10000 0.00188 0.061565
4 100000 0.017342 2.023369
この記事が気に入ったらサポートをしてみませんか?