gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:01:23 24 4
gpt4 key购买 nike

这个问题是 shift numpy array by row 的延伸

如果我使用测试 3 x 5 x 5 数组进行 shift (来自 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.]]])

但是,如果我对 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]]])

我做错了什么(误用shift?)还是这是一个错误?似乎是 scipy.ndimage.interpolation.shift

中的错误

最佳答案

这不是一个错误。 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. ]]])

关于python - numpy 数组的 scipy.ndimage.interpolation 移位给出错误结果 - bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58616854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com