[英]Interactive plot of larger-than-memory binary data file
我有大於內存的統一(定期網格化)2d 二進制數據,我正在嘗試使用 Dask、Datashader 和 Holoviews 的任意組合以交互方式 plot。 我願意使用其他基於 python 的工具,但現在是 inte.net 引導我使用這些工具。
數據文件約為 11 GB,由一個 (600000, 4800) float32 數組組成。
我想要 plot 它們以不同的縱橫比(1000x1000 像素),並有一個回調處理縮放/平移上的數據加載/着色。 我服務於瀏覽器而不是使用筆記本。
在 1000x1000px 數據着色器 canvas 中,我繪制了:
兩者都不是互動的。
我到目前為止使用 python3.10 的是:
import numpy as np
import datashader as ds
from datashader import transfer_functions as tf
import xarray as xr
import holoviews as hv
import panel as pn
hv.extension('bokeh', logo=False)
hv.output(backend="bokeh")
filename = 'path/to/binary/datafile'
arr = np.memmap(filename, shape=(4800,600000), offset=0, dtype=np.dtype("f4"), mode='r')
arr = xr.DataArray(arr, dims=("x", "y"), coords={'x': np.arange(4800), "y": np.arange(600000)})
cvs = ds.Canvas(plot_width=1000, plot_height=1000, x_range=(0, 4800), y_range=(0, 4800))
# the following line works too but does not fill the canvas
# cvs = ds.Canvas(plot_width=1000, plot_height=1000, x_range=(0, 4800), y_range=(0, 600000))
agg = cvs.raster(arr)
sh = tf.shade(agg)
pn.Row(sh).show()
任何建議表示贊賞!
我不確定這里的問題到底是什么,但是解決這個問題的 HoloViz 方法是使用不帶.persist()
或.compute()
的 dask。 np.memmap 方法也可能有效。
然后,您將使用 https ://examples.pyviz.org/census/census.html中所述的全息視圖,或 https ://hvplot.holoviz.org 中所述的 hvplot 。 如果沒有實際數據或它的合成版本,很難比這更具體。
順便說一句,我認為你在上面的 x_range 和 y_range 中切換了 x 和 y,因為 4800,600000 的 Numpy 形狀對應於 0,4800 的 y_range 和 0,600000 的 x_range(因為 NumPy 形狀是行,列和行在 y 上,列在 x 上)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.