【发布时间】:2020-04-04 12:06:56
【问题描述】:
当order=0 时,我很难理解scipy.ndimage.zoom() 的行为。
考虑以下代码:
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() 的一些意外行为,但我不太确定观察到的效果是否相同。
【问题讨论】:
-
我不确定你想重复什么形状,但也许
np.tile适合你。 -
如果您发布一个输入和输出的小例子,我可以帮助您弄清楚语法。
-
@Joe OP 询问的是 Python 库中函数的行为,而不是关于如何实现特定目标。
-
我在字里行间阅读:)
标签: python numpy scipy zooming ndimage