案例说明
我有一组检测器的光谱图(强度取决于时间和频率),这些检测器可以适合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
对数间隔浮点值。
询问
- 这里可能有什么问题?
.to()
即,当 3 个维度中的 2 个是非等距的非整数值时,为什么不能在数据集上工作,但如果只omega
保持非等距,它就可以很好地工作?
我可以使用并因此基本上展开原始对象来构造QuadMesh
特定角度的 a 。hv.QuadMesh( (...), kdim=[..])
- (一个额外的)为什么沿着例如时间维度的聚合使用
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.