scipy.ndimage.

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)