我有两个相同大小的 3 维 Numpy 数组。他们的条目相似,但不完全相同。我想在所有三个空间维度中移动一个数组,以便两个数组之间的差异最小。
我试图编写一个带参数的函数 - 我喜欢移动数组的长度列表, - 数组 1, - 数组 2。但我不知道如何最小化这个函数,我尝试使用 scipy.optimize.minimize,但失败了:
import numpy as np
from scipy.optimize import minimize
def array_diff(shift, array1, array2):
roll = np.roll(np.roll(np.roll(array2, shift[0], axis=0), shift[1], axis=1), shift[2], axis=2)
diff = np.abs(np.subtract(array1, roll))
diffs = np.sum(diff)
return diffs
def opt_diff(func, array1, array2):
opt = minimize(func, x0=np.zeros(3), args=(array1, array2))
return opt
min_diff = opt_diff(array_diff, array1, array2)
这给出了有关 roll = np.roll(...) 的错误消息它说“切片索引必须是整数或具有索引方法”。我想,我没有正确使用最小化函数,但不知道如何修复它。
我的目标是最小化函数 img_diff 并获得差异数组的所有条目的最小总和。因此,我想要三个参数 shift[0]、shift[1] 和 shift[2] 用于在 y、x 和 z 方向上移动。
谢谢你的帮助。