我是Python/Numpy中的新成員,並且正在嘗試將我的三重循環改進爲更高效的計算,但無法安靜地弄清楚如何執行此操作。在Python/Numpy中使用不同數組形狀的向量化三元組
上的大小(25,35)和陣列的形狀的網格進行的計算是:
A = (8760,25,35)
B = (12,25,35)
第一尺寸A對應於在一年(數小時〜8760 ),B中的第一維是月數(12)。我想使用B [0,:,]中的值作爲第一個月,而B [1,:,]代表第二個等等。
到目前爲止,我以非常不確定的方式創建了一個指數陣列充滿1,1,1 ...... 2,2,2 ......,12從B.我的代碼一些隨機數
N,M = (25, 35)
A = np.random.rand(8760,N,M)
B = np.random.rand(12,N,M)
q = len(A)/12
index = np.hstack((np.full((1,q),1),np.full((1,q),2),np.full((1,q),3),np.full((1,q),4),np.full((1,q),5),np.full((1,q),6),np.full((1,q),7),np.full((1,q),8),np.full((1,q),9),np.full((1,q),10),np.full((1,q),11),np.full((1,q),12)))-1
results = np.zeros((len(A),N,M))
for t in xrange(len(A)):
for i in xrange(N):
for j in xrange(M):
results[t][i][j] = some_function(A[t][i][j], B[index[(0,t)]][i][j],H = 80.)
def some_function(A,B,H = 80.0):
results = A*np.log(H/B)/np.log(10./B)
return results
提取值怎樣才能提高這個速度如何計算?
您能否分享一下'some_function'細節?因爲對於真正的矢量化,嵌套循環內的*深*嵌入的函數必須*出來循環,這取決於它的實現。 – Divakar
我編輯了包含該功能的問題!我感謝您的幫助! – HolmN
由於index [(0,t)]是一個標量,所以'index'是一維數組會在'index [(0,t)] [i] [j]'處出錯。 – Divakar