numpy 使用Dask数组进行填充和插入,导致块和形状之间不匹配

q1qsirdb  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(83)

我有一个形状为(1001,256,1,256)的Dask数组(数据超过1001个时间步,len(x)=len(z)=256,len(y)=1)。
我需要用形状为(1001,2,1,256)的数组填充x维度,我正在尝试使用dask.array.insert()dask.array.append(),它们等效于同名的numpy函数。
这应该会产生一个形状为(1001,260,1,256)的数组。
我的数组看起来像这样:

print(prepend_array)
print(append_array)
print(data)
dask.array<getitem, shape=(1001, 2, 1, 256), dtype=float64, chunksize=(1001, 2, 1, 256),chunktype=numpy.ndarray>
dask.array<getitem, shape=(1001, 2, 1, 256), dtype=float64, chunksize=(1001, 2, 1, 256),chunktype=numpy.ndarray>
dask.array<getitem, shape=(1001, 256, 1, 256), dtype=float64, chunksize=(1001, 8, 1, 256),chunktype=numpy.ndarray>

然后我做(插入和追加在一起-错误来自插入):

padded_data = da.append(
        da.insert(
            data,
            0,
            prepend_padding,
            axis=1),
        append_padding,
        axis=1)

但请参阅以下错误(来自dask.array.rechunk):

ValueError: Chunks and shape must be of the same length/dimension. Got chunks=((1001,), (1,), (1,), (256,)), shape=(1001, 1, 2, 1, 256)

似乎我正在获得一个维度,我希望添加到现有的维度。对我来说,很明显的答案是axis=1是问题所在,但我一直无法解决这个问题,因为任何有效值(0,1,2,3)都会给出len(shape)=5,而不是预期的4

gtlvzcf8

gtlvzcf81#

好吧,我想我跳得太快了,但我不会删除我的问题,我会提供答案。
错误不在axis=1中,而是在0中,或者更确切地说,是在dask.array.insert(arr, obj, values, axis)中的obj=0
解决方案:

padded_data = da.append(
        da.insert(
            data,
            [0,0,0,0],
            prepend_padding,
            axis=1),
        append_padding,
        axis=1)

[0,0,0,0]dataprepend_padding插入之前的位置- docs。

相关问题