我正在處理一些非常大的陣列。當然,我正在處理的一個問題是RAM耗盡,但即使在我的代碼運行緩慢之前,即使我有無限的RAM,它仍然會花費太長時間。我給一點我的代碼,以顯示我想要做的事:非常大的numpy陣列的效率
#samplez is a 3 million element 1-D array
#zfit is a 10,000 x 500 2-D array
b = np.arange((len(zfit))
for x in samplez:
a = x-zfit
mask = np.ma.masked_array(a)
mask[a <= 0] = np.ma.masked
index = mask.argmin(axis=1)
# These past 4 lines give me an index array of the smallest positive number
# in x - zift
d = zfit[b,index]
e = zfit[b,index+1]
f = (x-d)/(e-d)
# f is the calculation I am after
if x == samplez[0]:
g = f
index_stack = index
else:
g = np.vstack((g,f))
index_stack = np.vstack((index_stack,index))
我需要使用G和index_stack,其中的每一個300萬×10,000 2-d陣列,在進一步的計算。這個循環的每次迭代需要將近1秒,總共300萬秒,這太長了。
有什麼我可以做的,這樣的計算將運行得更快?我試着想,如果沒有這個循環,我可以做什麼,但我能想象的唯一方法是製作300萬份zfit,這是不可行的。
有沒有辦法通過不將所有內容保存在RAM中來處理這些數組?我是一名初學者,我所搜尋過的所有內容都是無關緊要的,或者我無法理解的。提前致謝。
samplez中有沒有重複的值?或者它只包含獨特的價值? –
它們都是獨一無二的,並且依次遞增 – cracka31
'e = zfit [b,index + 1]'有一個潛在的問題。如果數組的最小正值是最後一個元素,那麼在數組的任何行中,'[b,index + 1]'將導致一個'IndexError'(超出範圍)。第一行應該是'b = np.arange(len(zfit))' –