我有二維網格搜索的代碼,它作業得很好。這是示例代碼:
chinp = np.zeros((N,N))
O_M_De = []
for x,y in list(((x,y) for x in range(len(omega_M)) for y in range(len(omega_D)))):
Omin = omega_M[x]
Odin = omega_D[y]
print(Omin, Odin)
chi = np.sum((dist_data - dist_theo)**2/(chi_err))
chinp[y,x] = chi
chi_values1.append(chi)
O_M_De.append((x,y))
我的問題是,在未來的某個時候,我可能想要在更多維度上執行網格搜索。現在,如果這是 3 維的情況,那么就像在我的“for”陳述句(第 3 行)中添加另一個變數“z”一樣簡單。這段代碼對我來說也可以繼續添加更多維度(我已經嘗試過并且可以正常作業)。
但是,正如您所看到的,如果我想要大量維度來執行網格搜索,那么繼續向我的“for”陳述句添加變數會變得有點乏味和低效(例如,對于 5D,它會像 'for串列中的 v,w,x,y,z(((v,w,x,y,z)...')。
僅從各種谷歌搜索來看,我的印象是 itertools 在執行網格搜索時非常有用,但是我對編程仍然很陌生并且不熟悉它。
我的問題是,是否有人知道一種方法(使用 itertools 或我不知道的其他方法)能夠以更有效的方式將此代碼擴展到 N 維(即可能更改“for”陳述句,以便我可以網格無需添加另一個“for z in range etc”即可輕松搜索 N 維
預先感謝您的幫助。
uj5u.com熱心網友回復:
您想從 itertools 中查看產品功能
import itertools
x_list = [0, 1, 2]
y_list = [10, 11, 12]
z_list = [20, 21, 22]
for x, y, z in itertools.product(x_list, y_list, z_list):
print(x, y, z)
0 10 20
0 10 21
0 10 22
0 11 20
0 11 21
(...)
2 11 21
2 11 22
2 12 20
2 12 21
2 12 22
請注意,這不是最有效的方法。如果添加一些矢量化(例如使用 numpy 或 numba)和并行性(使用多處理或 numba),您將獲得最佳結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383699.html
