2017-10-26 31 views
1

私は2D配列を持っており、すべての行を考慮して各列間の平均距離を計算したいと考えています。例えばNumpy - 列間の平均距離

Iが2Dアレイであった場合、:

2 2 3 
4 2 5 
1 5 2 

をIは、列1及び2のすべての行を横切って、1と3のすべての行を横切って、そして2とを横切る3との間の平均距離を計算しますすべての行

列1及び2間の平均距離は、これを実現numpyの機能があります。2.

等しい、(|2-2| + |4-2| + |1-5|)/3でしょうか?

答えて

2

これは何か?アウト

import numpy as np 
x = np.array([[2,2,3],[4,2,5],[1,5,2]]) 

def calc(cols): 
    return np.mean(np.abs(np.diff(x[:, cols]))) 

print(calc([0,1])) 

2.0 

も考慮してください。

アウト
import itertools 
print(list(itertools.combinations(range(x.shape[1]), 2))) # outer list because using py3 

[(0, 1), (0, 2), (1, 2)] 
+0

を使用するよりもはるかに高速でなければなりません!手動で列を指定する代わりに、列の可能なすべての順列に対して 'calc'を実行する方法はありますか? – JGut

+2

forループ(対称性を排除する)を準備するか、itertoolsを使用してすべての組み合わせを準備します。 – sascha

1

を私が代わりにこれを行うことをお勧めしたい:

from scipy.spatial.distance import pdist 
m, n = in_arr.shape 
pdist(in_arr.T, 'cityblock')/m 

Out: array([ 2.  , 1.  , 2.33333333]) 

あなたはどのペア、使用に関係する距離を知りたい場合は、次の

np.stack(np.triu_indices(n, 1)) 

Out: 
array([[0, 0, 1], 
     [1, 2, 2]], dtype=int32) 

これははい、これは私が欲しいものであるforループまたはitertools

関連する問題