4

Python に 100 個の値のリストがあり、リスト内の各値は n 次元リストに対応しています。

例えば

x=[[1 2],[2 3]] is a 2d list

そのようなすべての点でユークリッドノルムを計算したいと思います。これを行う標準的な方法はありますか?

4

4 に答える 4

1

質問を正しく解釈した場合、100個のn次元ベクトルのリストがあり、それらの(ユークリッド)ノルムのリストが必要です。

ここでは、numpyを使用するのが最も簡単(そして最速!)だと思います。

import numpy as np
a = np.array(x)
np.sqrt((a*a).sum(axis=1))

ベクトルの次元が等しくない場合、またはnumpyを避けたい場合は、おそらく、

[sum([i*i for i in vec])**0.5 for vec in x]

また、

import math
[math.sqrt(sum([i*i for i in vec])) for vec in x]

編集:あなたが何を求めていたのか完全にはわかりません。つまり、代わりに、各要素がn次元ベクトルであるリストがあり、連続する各ペア間のユークリッド距離が必要なように見えます。numpyを使用すると(nが固定されていると仮定)、

x = [ [1,2,3], [4,5,6], [8,9,10], [13,14,15] ] # 3D example.
import numpy as np
a = np.array(x)
sqrDiff = (a[:-1] - a[1:])**2
np.sqrt(sqrDiff.sum(axis=1))

最後の行が戻るところ、

array([ 5.19615242, 6.92820323, 8.66025404])
于 2013-03-09T00:53:27.710 に答える
1

私はこれをscipyで見つけましたが、これは機能します。 スパイ

于 2013-03-04T03:36:37.683 に答える
0

これを行うと、各行のユークリッド ノルムを計算できます。

>>> a = np.arange(200.).reshape((100,2))
>>> a
array([[   0.,    1.],
       [   2.,    3.],
       [   4.,    5.],
       [   6.,    7.],
       [   8.,    9.],
       [  10.,   11.],
       ...
>>> np.sum(a**2,axis=-1) ** .5
array([   1.        ,    3.60555128,    6.40312424,    9.21954446,
         12.04159458,   14.86606875,   17.69180601,   20.51828453,
         23.34523506,   26.17250466,   29.        ,   31.82766093,
         34.6554469 ,   37.48332963,   40.31128874,   43.13930922,
         45.96737974,   48.7954916 ,   51.623638  ,   54.45181356,
         ...
于 2013-03-04T04:36:31.647 に答える
0

このコードを試してください:

from math import sqrt
valueList = [[[1,2], [2,3]], [[2,2], [3,3]]]

def distance(valueList):
  resultList = []
  for (point1, point2) in valueList:
    resultList.append(sqrt(sum(map(lambda (x1, x2): (x1 - x2) * (x1 - x2), zip(point1, point2)))))

  return resultList

print distance(valueList)

出力は [1.4142135623730951, 1.4142135623730951] です。

ここでは、値リストに 2 つの値が含まれていますが、値が 100 であっても問題ありません。

于 2013-03-04T03:43:31.627 に答える