我很难理解scipy.ndimage.zoom()
when的行为order=0
。
考虑以下代码:
import numpy as np
import scipy as sp
import scipy.ndimage
arr = np.arange(3) + 1
print(arr)
for order in range(5):
zoomed = sp.ndimage.zoom(arr.astype(float), 4, order=order)
print(order, np.round(zoomed, 3))
其输出是:
0 [1. 1. 1. 2. 2. 2. 2. 2. 2. 3. 3. 3.]
1 [1. 1.182 1.364 1.545 1.727 1.909 2.091 2.273 2.455 2.636 2.818 3. ]
2 [1. 1.044 1.176 1.394 1.636 1.879 2.121 2.364 2.606 2.824 2.956 3. ]
3 [1. 1.047 1.174 1.365 1.601 1.864 2.136 2.399 2.635 2.826 2.953 3. ]
4 [1. 1.041 1.162 1.351 1.59 1.86 2.14 2.41 2.649 2.838 2.959 3. ]
因此,当order=0
值(预期)未插值时。但是,我期望拥有:
[1. 1. 1. 1. 2. 2. 2. 2. 3. 3. 3. 3.]
即每个值的元素数量完全相同,因为缩放是整数。因此,我期望得到与以下相同的结果np.repeat()
:
print(np.repeat(arr.astype(float), 4))
[1. 1. 1. 1. 2. 2. 2. 2. 3. 3. 3. 3.]
为什么每个元素重复的次数会有所不同?
请注意,np.repeat()
它不能直接与多维数组一起使用,这就是我想从scipy.ndimage.zoom()
.
我的 NumPy 和 SciPy 版本是:
print(np.__version__)
# 1.17.4
print(sp.__version__)
# 1.3.3
我发现了这个:
`scipy.ndimage.zoom` vs `skimage.transform.rescale` with `order=0`,
这指向了一些意想不到的行为,scipy.ndimage.zoom()
但我不太确定观察到的效果是否相同。