2016-08-06 7 views
0

これは問題です。のは、私は行列A =2 numpy.ndarrayを同時にマッピング

array([[ 1., 0., 2.], 
     [ 0., 0., 2.], 
     [ 0., -1., 3.]]) 

とインデックスのP = array([0, 2, 1])のベクトルを持っているとしましょう。私は3x3行列Aを長さ3の配列(vと呼ぶ)に変えたいと思います。ここで、v [j] = A [j、p [j]]はj = 0,1,2です。 :

v = map(lambda (row, idx): row[idx], zip(A, p)) 

は、したがって、上記の行列A及び指数pのベクトルのために私はarray([1, 2, -1])(行0の、すなわち0番目の要素、1行目の2番目の要素、列2の第1要素)を得ることを期待します。

しかし、私はネイティブのnumpyを使用して同じ結果を得ることができますか(つまり、明示的にジップしてからマッピングする必要はありません)?ありがとう。

答えて

4

私はそのような機能は存在しないと思います。あなたが望むものを達成するために、私は2つの簡単な方法を考えることができます。あなたは何ができる:

np.diag(A[:, p]) 

は、ここで配列 pは対角線上に、あなたが探している要素を有するようにすべての行の列のインデックスとして適用されます。

A[np.arange(A.shape[0]), p] 
+2

あなたの最後の行は、適切な 'numpy'機能である:あなたが使用して不要なエントリの多くを生成するために避けることができる別の方法として

hpaulj

関連する問題