0

我有一组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。对于我的目标,这似乎很有用。我如何在梯度下降框架中使用它?

4

2 回答 2

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])
于 2012-06-04T16:48:33.893 回答
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)
于 2012-06-04T17:53:39.690 回答