[英]How to optimize following function in python?
我有現在需要 15 分鍾到 20 分鍾才能運行的功能。 我在算法中多次使用它,目前是算法。 由於消耗的時間而無法使用。 是否可以優化以下功能:
def find_all():
for x in range(4, 10):
for y in range(4, 10):
for z in range(4, 10):
for z1 in range(4, 10):
for z2 in range(4, 10):
for xs in range(13 - x):
for ys in range(13 - y):
for zs in range(13 - z):
for z1s in range(13 - z1):
for z2s in range(13 - z2):
a = np.zeros(12, int)
a[xs:xs+x] += 1
a[ys:ys+y] += 1
a[zs:zs+z] += 1
a[z1s:z1s+z] += 1
a[z2s:z2s+z] += 1
if 0 not in a:
yield x, y, z,z1,z2s,xs, ys,zs,z1s,z2s,a
%time list(find_all())
基本上我在這里要做的是建立一個沒有零的列表。 我確實嘗試了以下解決方案,但它僅適用於兩個范圍,並且我有一個要求,我可能需要多達 6 個范圍如何在 numpy 數組中生成給定模式的每個組合?
在所有范圍上使用itertools.product
可以更輕松地生成索引值。 這將減少編碼開銷。
接下來,請注意您有一個非常規則的重疊范圍序列。 您應該能夠推導出最小間隔覆蓋率,而不是費力地從每個組重新計算它。 在通過增量計算值的過程之前,首先檢查是否所有元素都被覆蓋。
請注意,這五對參數完全可以互換。 如果您不再浪費時間尋找等效的解決方案,則可以減少大量搜索。
這能讓你動起來嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.