map_coordinates#
- scipy.ndimage.map_coordinates(input, coordinates, output=None, order=3, mode='constant', cval=0.0, prefilter=True)[源代码]#
通过插值将输入数组映射到新坐标。
坐标数组用于为输出中的每个点寻找其在输入中对应的坐标。输入在这些坐标处的值由所要求阶数的样条插值决定。
输出的形状是通过去掉坐标数组的第一个轴而得出的。沿第一个轴的数组值即为在输入数组中寻找输出值时所对应的坐标。
- 参数:
- inputarray_like
输入数组。
- coordinatesarray_like
用于计算 input 值的坐标。
- outputarray or dtype, optional
放置输出的数组,或返回数组的数据类型。默认情况下,将创建一个与输入具有相同数据类型的数组。
- orderint, optional
样条插值的阶数,默认为 3。阶数必须在 0-5 的范围内。
- mode{‘reflect’, ‘grid-mirror’, ‘constant’, ‘grid-constant’, ‘nearest’, ‘mirror’, ‘grid-wrap’, ‘wrap’}, optional
mode参数决定了输入数组如何在边界之外进行扩展。默认为 ‘constant’。每个有效值的行为如下(请参阅额外的图和有关 边界模式 的详细信息)。- 'reflect' (d c b a | a b c d | d c b a)
输入通过最后像素的边缘反射进行扩展。此模式有时也称为半样本对称。
- ‘grid-mirror’
这是 ‘reflect’ 的同义词。
- 'constant' (k k k k | a b c d | k k k k)
输入通过用由
cval参数定义的相同常数值填充所有边界之外的值来扩展。在输入边界之外不执行插值。- ‘grid-constant’ (k k k k | a b c d | k k k k)
输入通过用由
cval参数定义的相同常数值填充所有边界之外的值来扩展。插值也发生在输入范围之外的样本上。- 'nearest' (a a a a | a b c d | d d d d)
输入通过复制最后像素进行扩展。
- 'mirror' (d c b | a b c d | c b a)
输入通过最后像素的中心反射进行扩展。此模式有时也称为全样本对称。
- ‘grid-wrap’ (a b c d | a b c d | a b c d)
输入通过环绕到对边进行扩展。
- ‘wrap’ (d b c d | a b c d | b c a b)
输入通过环绕到相反的边缘来扩展,但方式是使最后一个点和初始点完全重叠。在这种情况下,在重叠点处选择哪个样本并未明确定义。
- cval标量,可选
如果 mode 为 'constant',则用于填充输入超出边缘的值。默认值为 0.0。
- prefilterbool, optional
确定在插值前是否使用
spline_filter对输入数组进行预过滤。默认值为 True,如果order > 1,则会创建一个包含过滤值的临时 float64 数组。如果将其设置为 False,除非输入已预过滤(即是对原始输入调用spline_filter的结果),否则当order > 1时输出会略微模糊。
- 返回:
- map_coordinatesndarray
转换输入后的结果。输出的形状是通过去掉 coordinates 的第一个轴而得出的。
附注
对于复数类型的 input,该函数会分别独立映射实部和虚部。
1.6.0 版本已添加: 添加了复值支持。
数组 API 标准支持
map_coordinates除了支持 NumPy 之外,还对兼容 Python Array API 标准的后端提供实验性支持。请考虑通过设置环境变量SCIPY_ARRAY_API=1并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。支持以下后端与设备(或其他能力)的组合。库
CPU
GPU
NumPy
✅
不适用
CuPy
不适用
✅
PyTorch
✅
⛔
JAX
✅
✅
Dask
⚠️ 计算图
不适用
有关更多信息,请参阅 对数组 API 标准的支持。
示例
>>> from scipy import ndimage >>> import numpy as np >>> a = np.arange(12.).reshape((4, 3)) >>> a array([[ 0., 1., 2.], [ 3., 4., 5.], [ 6., 7., 8.], [ 9., 10., 11.]]) >>> ndimage.map_coordinates(a, [[0.5, 2], [0.5, 1]], order=1) array([ 2., 7.])
在上方示例中,a[0.5, 0.5] 的插值结果给出 output[0],而 a[2, 1] 为 output[1]。
>>> inds = np.array([[0.5, 2], [0.5, 4]]) >>> ndimage.map_coordinates(a, inds, order=1, cval=-33.3) array([ 2. , -33.3]) >>> ndimage.map_coordinates(a, inds, order=1, mode='nearest') array([ 2., 8.]) >>> ndimage.map_coordinates(a, inds, order=1, cval=0, output=bool) array([ True, False], dtype=bool)