概要
numpy配列の多重ループの処理が遅く,リスト内包表記で書くと高速化すると聞いたので試してみましたが,むしろ低速化してしまい,その原因を探っています.
環境
Model Name: MacBook Pro Model Identifier: MacBookPro14,1 Processor Name: Intel Core i5 Processor Speed: 2.3 GHz Number of Processors: 1 Total Number of Cores: 2
jupyter lab 0.35.4
python 3.7.5
コード
import numpy as np import time inn1 = np.zeros((10,10000,100,100))+1 inn2 = np.zeros((10,10000,100,100))+1 inn3 = np.zeros((10,10000,100,100))+1 start1 = time.time() inn3 = np.array([[[[inn2[k][h][i][j] + inn1[k][h][i][j] * inn1[k][h][i][j] for j in range(100)] for i in range(100)] for h in range(10000)] for k in range(10)]) end1 = time.time() dif1 = end1 - start1 print('dif1',dif1) inn1 = np.zeros((10,10000,100,100))+1 inn2 = np.zeros((10,10000,100,100))+1 start2 = time.time() for k in range(10): for h in range (10000): for i in range(100): for j in range(100): inn2[k][h][i][j] += inn1[k][h][i][j] * inn1[k][h][i][j] end2 = time.time() dif2 = end2 - start2 print('dif2',dif2)
output
dif1 28585.88311481476 dif2 2316.2408690452576
考察
リスト内包表記で速くなるのは,numpy.appendのループの例をよく見かけるのですが,上記のような単なる演算だと,あまり速度が変わらないのかなと思いました.もちろん,pythonをcythonで書き換えたり,multiprocessingやJoblibで高速化しますが,それ以外の方法で高速化できないかなと思っています.
回答1件
あなたの回答
tips
プレビュー