2016-05-04 131 views
0

私のデータセット( "行列"と呼ばれるnumpy配列の形)のどの点がn次元空間のベクトル(ベクトルと呼ばれる配列)に最も近いかを計算しようとしています。次に、 "matrix"と同じですが、追加のラベル(= "matrix_with_labels")を含むデータセットからこれらの同じベクトルを抽出したいと思います。なぜnumpy関数が配列の形状を変更するのですか?

vector=([1,2,3,...]) 
matrix=[[1,2,3,...], [2,4,6,...], ...]] 
matrix_with_labels=[[a,1,2,3,...], [b,2,4,6,...], ...]] 

したがって、Iは行列のベクトルと各項目間の距離を計算する:

dist=scipy.spatial.distance.cdist(matrix,vector,'euclidean') 

そしてIは最も近い隣人を識別するために、これらの距離をソート:

sorted_index=np.argsort(dist, axis=0) 

そしてIはで説明されているnumpy.takeを使用して、 "sorted_index"によって "matrix_with_labels"をソートしようとします。

result= matrix_with_labels.take(sorted_index, 0) 

私はさらにそれを処理しようとするまでの成果だけで罰金に見える - 変更された形状があるようです:私は、最初の「matrix_with_labels」の形状を見てみると

print result.shape 
(20, 1, 11) 

を、しかし:

matrix_with_labels.shape 
(20, 11) 

take上のドキュメントは言う:

サブアレイ:ndarray 返される配列の型は、aと同じです。

私は間違っていますか?どんな助けもありがとう!

+1

「同じタイプ」は「同じ形状」を意味するものではありません。 – user2357112

+1

'dist'と' x'(別名 'sorted_index')の'形 'は何ですか? 'matrix_with_labels.take(x、0)'は 'matrix_with_labels [x、:]'と同じです。 – hpaulj

答えて

1

(20, 11)の形から始めれば、(20, 1, 11)の形を得る唯一の方法は、xの形が(1, 11)の場合です。

try

+0

美しく働いてくれてありがとう。 – patrick

関連する問題