此问题是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])...
这不是错误。 According to the docs,它使用3阶样条插值(默认情况下),并且您的稀疏矩阵仅充满np.nan
值,因为您无法真正对其进行插值。
您基本上可以使用order=0
关闭插值的“功能”: