达斯克构建ND惰性数组

时间:2019-05-17 22:34:14

标签: dask

我正在尝试根据离散化的曲面与球体内部之间位置矢量的差异来构建5D(惰性)数组。 使用for循环,这是一个直截了当的问题(仅嵌套5个深度深层-两个用于表面位置,三个用于内部位置)。 我正在尝试使用einsum进行大部分实际计算,但是在解决如何在Dask中构建5D数组方面遇到了真正的麻烦。

示例:

DX_ijlmn = SX_ij-VX_lmn
其中DX是表面(SX_ij)与内部体积(VX_lmn)之间的x分量之差。

任何提示将不胜感激。假定DX最终将无法容纳在内存中。

2 个答案:

答案 0 :(得分:0)

没有更多信息很难提供帮助,但是您可能需要查看Dask Delayeddocumentation on using Dask Delayed with Dask Array。这是复杂问题的通常后备方法。

对于您的问题,可能有一个更简单的解决方案,但是很遗憾,我对您的问题的理解不够充分,无法提供一个解决方案。

答案 1 :(得分:0)

如果我正确理解了您的问题,则您有形状为<< em> i , j SX 和 VX >)和( l m n ),并希望计算它们之间的某种“外部”差异,从而导致数组 DX 形状( i j l m n )?在这种情况下,您要寻找的是

DX = SX[:,:,None,None,None] - VX[None,None,:,:,:]

这会将 SX VX 强制转换为形状( i j ,1、1、1, )和(1,1, l m n ),这将允许减法在维度上正确广播。生成的数组 DX 将具有形状( i j l m n ),并且本质上是惰性的(只有在需要时才实际计算值)。