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

时间:2019-10-29 23:43:10

标签: python numpy scipy shift

这个问题是shift numpy array by row

的扩展

如果我VecFunc(来自type VecFunc<'T1, 'T2>(f:'T1 -> 'T2, mult:float * 'T1 -> 'T1, add:'T2 * 'T2 -> 'T2) = member x.F = f member x.Mult = mult member x.Add = add static member (.*) (a:float, f:VecFunc<_, _>) = VecFunc((fun v -> f.F (f.Mult(a, v))), f.Mult, f.Add) static member (+) (f1:VecFunc<_, _>, f2:VecFunc<_, _>) = VecFunc((fun v -> f1.Add(f1.F v, f2.F v)), f1.Mult, f1.Add) let inline vfunc (f:^V -> ^T) = VecFunc< ^V, ^T>(f, (fun (a, b) -> (^V : (static member (.*) : float * ^V -> ^V) (a, b))), (fun (a, b) -> a + b)) let vf = vfunc (fun (v:Vec2) -> v + v) average vf vf )使用3 x 5 x 5的测试数组,那么一切都会按预期进行:

shift

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

scipy.ndimage.interpolation

我做错了什么吗(误用了班次?)或这是一个错误吗?似乎是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.]]])

中的错误

1 个答案:

答案 0 :(得分:1)

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

实际上,您可以使用order=0关闭插值的“功能”:

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

这将导致:

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]],

       [[ 0.     ,      nan,      nan,      nan,      nan],
        [     nan,  0.     ,      nan,      nan, -1.07347],
        [     nan,      nan,  0.     ,      nan,      nan],
        [     nan,      nan,      nan,  0.     ,      nan],
        [     nan,  1.07347,      nan,      nan,  0.     ]],

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