Numpy数组的最小差异
Minimum difference of Numpy arrays
我有两个相同大小的 3 维 Numpy 数组。他们的条目相似,但不完全相同。我想在所有三个 space 维度上移动一个数组,以便两个数组之间的差异最小。
我试着写了一个带参数的函数
- 我喜欢移动数组的长度列表,
- 数组 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(...) 的错误消息,它说 "slice indices must be integers or have an index method"。我想,我没有正确使用最小化功能,但不知道如何修复它。
我的目标是最小化函数img_diff并得到差分数组所有条目的最小总和。因此,我想要三个参数 shift[0]、shift[1] 和 shift[2],用于在 y、x 和 z 方向上移动。
感谢您的帮助。
This gives an error message regarding roll = np.roll(...) It says
"slice indices must be integers or have an index method".
np.roll 需要 shift
参数的整数。 np.zeros 创建一个浮点数组。为 x0
指定整数类型:
x0=np.zeros(3,dtype=np.int32)
x0=np.zeros(3)
x0
Out[3]: array([ 0., 0., 0.])
x0[0]
Out[4]: 0.0
x0=np.zeros(3,dtype=np.int32)
x0[0]
Out[6]: 0
scipy.optimize.minimize 将尝试通过 分数 调整 x0
所以也许只需在 array_diff
:
中添加一个语句
def array_diff(shift, array1, array2):
shift = shift.astype(np.int32)
...
我有两个相同大小的 3 维 Numpy 数组。他们的条目相似,但不完全相同。我想在所有三个 space 维度上移动一个数组,以便两个数组之间的差异最小。
我试着写了一个带参数的函数 - 我喜欢移动数组的长度列表, - 数组 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(...) 的错误消息,它说 "slice indices must be integers or have an index method"。我想,我没有正确使用最小化功能,但不知道如何修复它。
我的目标是最小化函数img_diff并得到差分数组所有条目的最小总和。因此,我想要三个参数 shift[0]、shift[1] 和 shift[2],用于在 y、x 和 z 方向上移动。
感谢您的帮助。
This gives an error message regarding roll = np.roll(...) It says "slice indices must be integers or have an index method".
np.roll 需要 shift
参数的整数。 np.zeros 创建一个浮点数组。为 x0
指定整数类型:
x0=np.zeros(3,dtype=np.int32)
x0=np.zeros(3)
x0
Out[3]: array([ 0., 0., 0.])
x0[0]
Out[4]: 0.0
x0=np.zeros(3,dtype=np.int32)
x0[0]
Out[6]: 0
scipy.optimize.minimize 将尝试通过 分数 调整 x0
所以也许只需在 array_diff
:
def array_diff(shift, array1, array2):
shift = shift.astype(np.int32)
...