簡體   English   中英

大於內存的二進制數據文件的交互式 plot

[英]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 中,我繪制了:

  • 4800x4800 點(填滿畫布)
  • 600000x4800 點(僅填充 canvas 底部的幾個像素,因為彩色像素的縱橫比為 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()

任何建議表示贊賞!

我不確定這里的問題到底是什么,但是解決這個問題的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM