我一直在編寫一個程序來蠻力檢查一系列數字來尋找歐拉磚,但我想出的方法涉及三重循環。由於嵌套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值?
謝謝。
示例: 如果x = 10,當t = 3我想獲得:
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左右。
編輯:解
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中。 –