3d点的平均值作为最小化任务

时间:2012-06-04 16:40:27

标签: python gradient points mean

我有一组n 3D积分(x,y,z),我想计算其均值。

特别是我的目的是比较几个指标之间的差异。

欧几里德距离:D_E(D_1,D_2) = ||D_1 - D_2||

黎曼距离:D_R(D_1,D_2) = ||log(D_1^(-1/2) * D_2 * D_1^(-1/2))||

一旦我修正了一个指标,我应该计算一个最小化问题。

我在Python Scipy.optimize中创建了这类任务,但我不知道如何制定问题。我应该使用for循环吗?

编辑:

我找到了 scipy.optimize.leastsq 。对我的目标来说,它似乎很有用。我如何在梯度下降框架中使用它?

2 个答案:

答案 0 :(得分:1)

>>> import numpy as np
>>> a = np.array([[1,2,3],[1,2,3],[7,-100,8]])
>>> a.mean(axis=0)
array([  3.        , -32.        ,   4.66666667])

答案 1 :(得分:0)

没有额外的库:

>>> make_operation = lambda op: lambda *points: tuple(map(op, *points))

>>> add = make_operation(lambda x1, x2: x1 + x2)
>>> sub = make_operation(lambda x1, x2: x1 - x2)

>>> print add((1,2,3), (4,5,6))
(3,5,7)

>>> div = lambda point, num: tuple(map(lambda x: float(x) / num, point))
>>> print div((4,6,8), 2)
(1,2,3)

>>> mean = lambda *points: div(reduce(add, points), len(points))
>>> print mean((1,2,3), (1,2,3), (7,-100,8))
(3.0, -32.0, 4.666666666666667)