scipy.ndimage.interpolation numpy array的移位给出了错误的结果-错误?

问题描述 投票:0回答:1

此问题是shift numpy array by row的扩展名>

如果我shift(来自scipy.ndimage.interpolation)使用3 x 5 x 5的测试数组,那么一切都会按预期工作:

arr = np.ones([3,5,5])

array([[[ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.]],

       [[ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.]],

       [[ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.]]])

shift(arr,(1,0,0), cval=np.nan)

array([[[ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan]],

       [[  1.,   1.,   1.,   1.,   1.],
        [  1.,   1.,   1.,   1.,   1.],
        [  1.,   1.,   1.,   1.,   1.],
        [  1.,   1.,   1.,   1.,   1.],
        [  1.,   1.,   1.,   1.,   1.]],

       [[  1.,   1.,   1.,   1.,   1.],
        [  1.,   1.,   1.,   1.,   1.],
        [  1.,   1.,   1.,   1.,   1.],
        [  1.,   1.,   1.,   1.,   1.],
        [  1.,   1.,   1.,   1.,   1.]]])

但是,如果我对3 x 5 x 5数据数组执行相同的移位,则会得到所有np.nan值:

array([[[ 0.        ,         nan,         nan,         nan,         nan],
        [        nan,  0.        ,         nan,         nan, -1.07346633],
        [        nan,         nan,  0.        ,         nan,         nan],
        [        nan,         nan,         nan,  0.        ,         nan],
        [        nan,  1.07346633,         nan,         nan,  0.        ]],

       [[ 0.        ,         nan,         nan,         nan,         nan],
        [        nan,  0.        ,         nan,         nan,         nan],
        [        nan,         nan,  0.        , -1.44470265,         nan],
        [        nan,         nan,  1.44470265,  0.        ,         nan],
        [        nan,         nan,         nan,         nan,  0.        ]],

       [[ 0.        ,         nan,  1.80965682,         nan,         nan],
        [        nan,  0.        ,         nan,         nan,         nan],
        [-1.80965682,         nan,  0.        ,         nan,         nan],
        [        nan,         nan,         nan,  0.        ,         nan],
        [        nan,         nan,         nan,         nan,  0.        ]]])

shift(stats1_arr,(1,0,0), cval=np.nan)

array([[[ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan]],

       [[ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan]],

       [[ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan]]])

我是不是做错了什么(误用班次?)或这是一个错误吗?似乎是scipy.ndimage.interpolation.shift]中的错误

[这个问题是逐行移位numpy数组的扩展如果我使用3 x 5 x 5数组进行移位(来自scipy.ndimage.interpolation),那么一切都会按预期进行:arr = np.ones([3,5 ,5])...

python numpy scipy shift
1个回答
0
投票

这不是错误。 According to the docs,它使用3阶样条插值(默认情况下),并且您的稀疏矩阵仅充满np.nan值,因为您无法真正对其进行插值。

您基本上可以使用order=0关闭插值的“功能”:

© www.soinside.com 2019 - 2024. All rights reserved.