地球物理データを含む大きな行列(形状:2e6,6)があります。変数を割り当てるために行列内の値を検索する前に、私は3 for
ループを持っています。性能の向上python行列
私の最初の解決策はnp.where
です。それはあまりにも遅いです!パフォーマンスを向上させるために別のfor
ループを使用するにはit would be betterを読んでいます。しかし、私が思いついたコードは少し遅いです。
誰かがパフォーマンスを改善する方法を知っていますか?
第一溶液(np.where
)
for lat in LATS:
for lon in LONS:
for depth in range(1,401,1):
node_point_line = matrix[np.where((matrix[:,0]==lat) * (matrix[:,1]==lon) * (matrix[:,2]==depth))][0]
var1 = node_point_line[3]
var2 = node_point_line[4]
var3 = node_point_line[5]
...
第二の溶液(余分for
ループ)
for lat in LATS:
for lon in LONS:
for depth in range(1,401,1):
matrix_flat = matrix.flatten()
for i in range(len(matrix_flat)):
if matrix_flat[i]==lat and matrix_flat[i+1]==lon and matrix_flat[i+2]==depth:
var1 = matrix_flat[i+3]
var2 = matrix_flat[i+4]
var3 = matrix_flat[i+5]
...
、両方のソリューションは遅すぎます。私はFortranやC++を避ける(私はそれが速いことを知っている)。助言がありますか?
によってそれは 'WHERE'が遅いということはあまりありませんが、あなたはそれを何回もやっています。あなたは3つのレベルを反復しています。あなたは 'var1、var2、var3'で何をしていますか? – hpaulj
これらの変数を使用して、各LAT/LONポイントの深度積分を計算します。 – Johngoldenboy
@Johngoldenboyは、[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)があるようです:あなたはアルゴの特定の部分を最適化するように頼みます(ルックアップ)大きな問題を解決しようとしています。積分を計算するアルゴリズムの高速化を求める別の質問(おそらく[CS](http://cs.stackexchange.com/)のウェブサイト)を開くことをお勧めします。私はあなたがしていることが極端に最適ではないと思っていますが、あなたが何をしようとしているのか分かりません。 – yeputons