Вы можете использовать scipy.ndimage.map_coordinates
.
Вот map_coordinate
эквивалентов примеров ArrayResample :
In [51]: import scipy.ndimage as ndimage
In [67]: ndimage.map_coordinates(np.array([1,2,3,4,5], dtype=float), [np.linspace(0,4,9)], order=1)
Out[67]: array([1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. ])
In [68]: ndimage.map_coordinates(np.array([1,2,3,4,5], dtype=float), [np.linspace(0,4,3)], order=1)
Out[68]: array([1., 3., 5.])
In [65]: ndimage.map_coordinates(np.array([(1,2,3), (2,3,4), (3,4,5)], dtype=float), np.meshgrid(np.linspace(0,2,6), np.linspace(0,2,6), indexing='ij'), order=1)
Out[65]:
array([[1. , 1.4, 1.8, 2.2, 2.6, 3. ],
[1.4, 1.8, 2.2, 2.6, 3. , 3.4],
[1.8, 2.2, 2.6, 3. , 3.4, 3.8],
[2.2, 2.6, 3. , 3.4, 3.8, 4.2],
[2.6, 3. , 3.4, 3.8, 4.2, 4.6],
[3. , 3.4, 3.8, 4.2, 4.6, 5. ]])
Первый аргумент ndimage.map_coordinates
в основном не требует пояснений.
В отличие от функции ArrayResample в Mathematica, вторым аргументом являются координаты , при которых вы хотите пересчитать массив.
При звонке ndimage.map_coordinates(input, coordinates)
,
если input
является N-мерным массивом, то ожидается, что coordinates
будет последовательностью из N
массивов - по одному массиву для каждой оси.
Если A
является массивом формы (h, w)
, и вы хотите пересчитать A
в новый массив формы (H, W)
,
тогда вы будете использовать
ndimage.map_coordinates(A, np.meshgrid(np.linspace(0,h-1,H), np.linspace(0,w-1,W),
indexing='ij'), order=1)
np.linspace
используется для генерации одинаково распределенных значений между 0
и h-1
(и 0
и w-1
). Эти значения являются одномерными координатами. np.meshgrid
используется для объединения 1D координат в 2D сетку.