私は、ブルートフォースを使ってオイラーレンガを探すためのプログラムを書いてきましたが、私が考えた方法は3重ループです。入れ子にされたPythonループは非常に遅くなるので、必要な値の配列を作成するためにnumpyを使用するより良い方法があるのだろうかと思っていました。numpyで入れ子になっているループを取り除く
#x=max side length of brick. User Input.
for t in range(3,x):
a=[];b=[];c=[];
for u in range(2,t):
for v in range(1,u):
a.append(t)
b.append(u)
c.append(v)
a=np.array(a)
b=np.array(b)
c=np.array(c)
...
numpyコマンドを使用して配列af値を生成するより良い方法はありますか?
ありがとうございました。
例: tは私が取得したい3 = X = 10、もし:
a=[3]
b=[2]
c=[1]
初めてループを通って。その後、T 4 =とき:
a=[4, 4, 4]
b=[2, 3, 3]
c=[1, 1, 2]
第三の時間(t = 5)欲しい:
a=[5, 5, 5, 5, 5, 5]
b=[2, 3, 3, 4, 4, 4]
c=[1, 1, 2, 1, 2, 3]
など、最大辺の長さまでの周り5000程度です。
EDIT:ソリューション
a=array(3)
b=array(2)
c=array(1)
for i in range(4,x): #Removing the (3,2,1) check from code does not affect results.
foo=arange(1,i-1)
foo2=empty(len(foo))
foo2.fill(i-1)
c=hstack((c,foo))
b=hstack((b,foo2))
a=empty(len(b))
a.fill(i)
...
が速くなりました何度も動作します。皆さんありがとう。
あなたは、入力値と所望の出力の例を投稿してもらえますか?正しい表現を見つけるのに役立ちます。 –
3レベルのネストされたループは、Pythonだけでなく、遅いです。 –