4

考えられるすべての組み合わせ(n個のリスト)からの最小二乗差の高性能計算のために、私はいくつかの厄介なことを学び始めました:

今、私は計算に行き詰まっていて、いくつかの助けを使うことができます。

私は次のようなnumpy配列オブジェクトを持っています:

>>> items
array([[ 246, 1143, 1491, ..., 1167,  325, 1158],
       [ 246, 1143, 1491, ..., 1167,  519, 1158],
       [ 246, 1143, 1491, ..., 1167,  507, 1158],
       ..., 
       [1491, 1143,  246, ..., 1167,  325, 1158],
       [1491, 1143,  246, ..., 1167,  519, 1158],
       [1491, 1143,  246, ..., 1167,  507, 1158]])

彼のすべてのメンバーの中で最小二乗差のある配列の数を取得したいと思います。numpythonicバージョンは次のとおりです。

for num,item in enumerate(items): #Calculate for each list of items
      for n in range(len(item)):
        for i in range(n, len(item)):
          dist += (item[n]-item[i])**2 #Key formula
          if dist>min_dist: #This is a shortcut
              break
          else:
              continue
          break               
      if min_dist is None or dist < min_dist:
        min_dist = dist
        best = num #We get the number of the combination we want

ヒントをいただければ幸いです。

4

2 に答える 2

1

NxMアレイを初期化します。

>>> import numpy as np
>>> items = np.random.random_sample((10,3))

N M各次元ベクトルのすべての要素間の二乗和を計算し、結果をリストに格納します。

>>> sq = [(np.subtract.outer(item,item) ** 2).sum() for item in items]

すべての要素間の二乗和が最小のベクトルのインデックスを見つけます。

>>> best_index = np.argmin(sq)

または、中間リストを回避するには:

best = np.inf
best_index = None
for i,item in enumerate(items):
    ls = (np.subtract.outer(item,item) ** 2).sum()
    if ls < best:
        best = ls
        best_index = i
于 2012-12-06T18:54:48.193 に答える
0
import numpy as np
[(lambda(x):np.square(np.dot(x,-1*x)))(x) for x in items]
于 2012-12-06T18:42:16.667 に答える