import numpy as np
import dask.array as dda
def index_nearest(to_find, coord_grid):
"""Return indexes of elements in coord_grid that most
closely match the ones in to_find.
"""
to_find = to_find.reshape(-1,1)
return np.argmin(np.abs(to_find - coord_grid), axis=1)
n_points = 10000
n_grid = 800
x = np.random.uniform(0, n_grid, [n_points,])
x_grid = np.arange(n_grid)
x_da = dda.from_array(x, chunks=10)
x_grid_da = dda.from_array(x_grid, chunks=10)
index_nearest(x_da, x_grid_da)
運行最后一行時,我收到一條警告,提示塊數增加了 40 倍,repr 如下所示:

對于這么簡單的計算,270,000 個任務是不是有點太多了?
uj5u.com熱心網友回復:
任務的數量取決于塊的數量,特別是對于需要成對組合不同塊的操作。
由于具有 10 個元素的塊占用 80 個位元組,通常有足夠的空間使用更大的塊,例如將塊大小增加到 1_000 個元素會將單個塊的記憶體負載增加到大約 8 KB,而要簡單創建的任務數量x_da會增加從 1000 減少到 10。使用 1_000 的塊大小將完整操作的任務計數減少到 61 個任務。
1_000 的塊大小仍然相當小,在許多情況下,可能會逃脫 100 MB 甚至更大的塊大小(取決于硬體和執行的計算型別)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/420099.html
標籤:
上一篇:Numpy陣列錯誤的尺寸與計算
