0

案例说明

我有一组检测器的光谱图(强度取决于时间和频率),这些检测器可以适合BlockDataset大小的 3D 阵列M x N x K(这里:M=频率N数,时间步K数,是检测器的数量)。频率是对M数间隔的,K检测器通常由包含 2 个角度的元组索引,但为简洁起见,我只考虑一个角度。N时间值是等距的。

可以使用适用于所有维度的值数组创建 HoloViews 数据集BlockDataset,但需要我从简单hv.Image显示切换到hv.QuadMesh显示。

问题描述

如果数据集是使用实际角度值创建的,而不仅仅是探测器编号,则转换为 aHoloMap失败并出现以下错误:

DataError: The shape of the intensity value array does not match the expected dimensionality indicated by the key dimensions. Expected 2-D array, found 3-D array.

如果使用探测器编号(整数)而不是角度(浮点数),则没有问题。

代码

timeDim = hv.Dimension("time", label="Time", unit="sec", values=times)
freqDim = hv.Dimension("frequency", label = "Angular frequency", unit="$\\frac{rad}{s}", values=omega)
polarAngleDim = hv.Dimension("angle", label=" $\varphi$", unit="rad", values=angles[:,0])
intensityDim = hv.Dimension("intensity", label="Intensity $\\frac{d^2 W}{d\Omega d\omega}(t,\vartheta,\varphi)", unit="J/(s srad)")

hvDatasetNatural = hv.Dataset((times, angles[:,0], omega, BlockDataset.transpose()), [timeDim, polarAngleDim, freqDim], intensityDim)
subset = hvDatasetNatural.select( angle=list(angles[selectedIndices,0]) )
img = subset.to( new_type=hv.QuadMesh, kdims=[timeDim, freqDim])

a 的选择subset似乎工作正常,但子集的转换和整个数据集的转换都不起作用QuadMesh。再次注意:times是线性间隔浮点值,angles非线性间隔浮点数和omega对数间隔浮点值。

询问

  1. 这里可能有什么问题?.to()即,当 3 个维度中的 2 个是非等距的非整数值时,为什么不能在数据集上工作,但如果只omega保持非等距,它就可以很好地工作?

我可以使用并因此基本上展开原始对象来构造QuadMesh特定角度的 a 。hv.QuadMesh( (...), kdim=[..])

  1. (一个额外的)为什么沿着例如时间维度的聚合使用subset.reduce(timeDim, np.sum)工作,但subset.reduce(timeDim, np.trapz)失败:
DataError: None of the available storage backends were able to support the supplied data format. GridInterface raised following error:

 GridInterface interface requires at least one value dimension.
4

0 回答 0