大于内存的二进制数据文件的交互图



我有大于内存的统一(定期网格化)2d二进制数据,我正试图使用Dask, Datashader和Holoviews的任何组合交互式绘图。我对使用其他基于python的工具持开放态度,但互联网目前已经引导我使用这些工具。

数据文件约11gb,由一个(600000,4800)float32数组组成。

我想在不同的宽高比(1000x1000px)上绘制它们,并在缩放/平移上有一个回调处理数据加载/着色。我在为浏览器服务,而不是使用笔记本。

在一个1000x1000px的数据画布中,我绘制了:

  • 4800x4800点(填充画布)
  • 600000x4800点(仅填充画布底部的几个像素,因为彩色像素的宽高比为600000/4800)

我到目前为止使用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()

任何建议都是感激的!

我不确定这里的ask是什么,但是HoloViz处理这个问题的方法是使用没有.persist().compute()的dask。np。Memmap方法也可以。

然后你会使用holoviews如https://examples.pyviz.org/census/census.html所述,或hvplot如https://hvplot.holoviz.org所述。如果没有实际的数据或合成的版本,很难比这更具体。

BTW,我认为你在上面的x_range和y_range中切换了x和y,因为Numpy形状为4800,600000对应于y_range为0,4800和x_range为0,600000(因为Numpy形状是行,列,而行在y上,列在x上)。

最新更新