2016-07-26 13 views
0

2D平面で2つのインデックスを合計しなければならず、空間の各点で関数の値を取得する必要があります。私のpythonプログラムをより効率的にする

私がそれを行う方法を知っている最も簡単な方法と唯一の方法は、4 forループです。それはうまくいくが、それは非常に遅い。あなたはそれをより速くする方法を訴えていますか?

"size"は私が使用しているステップを定義しており、私のシステムのサイズは任意の単位であり、 "n_0"はリストのリストであり、yの座標xに依存する入力パラメータです。

for x in range(size): 
    for y in range(size): 
     for x_ in range(size): 
      for y_ in range(size): 
       if x == x_ and y == y_: 
        pass 
       else: 
        value = n_0[x][y] * N/math.sqrt((x - x_)**2 + (y - y_)**2) 
        print(value) 

編集:私は私の問題は私の構文でより簡潔されていないので、これは重複をマークした理由を知りません。私の問題は、構文が何であってもコードがO(n^4)であり、これを減らす必要があることです。 Pythonの2.xのxrangeについては

+0

を取るので、あなたが任意の座標を無視している(ビット)

import a c=[] def f(): #some loop with a.b and c 

より

import a c=[] def f(): a_b_local=a.b c_local=c #some loop with a_b_local and c_local 

を行うには高速ですが、あなたの座標_outside_座標系の 'range(size)'チェックのシステムは?また、「N」は何と定義されていますか? –

+0

多分助けにはならないかもしれませんが、平方根を計算して手動で計算するのではなく、math.hypotを考慮する必要があります。 – guidot

+0

典型的な 'size'の大きさはどれくらいですか?計算を速く実行できるのでnumpyを使用することをお勧めしますが、ベクトルをメモリに格納する必要があります –

答えて

0

は、それがためので、代わりに

for i in range(start,stop): 
    #do something 

i=start 
while i<stop: 
    #do something 
    i+=1 

を行うにしても高速ですrangeよりも速く、通常(2.xおよび3.x)であります-loopはもっと複雑なものです。

また、名前の検索がちょうど確認するためにいくつかの時間

関連する問題