2016-03-22 16 views
-1

この配列から、数値配列の値とインデックスを持つ新しい配列(行列)を作成する必要があります。既存のアレイ。具体numpy既存の配列から新しい2次元配列を作成し、インデックスとしての列値

配列1 =配列([0、1、0.4284256]、 [0、2、0.38090856]、 [1、2、0.32901526]]) 。今

new Array2 [0,1] = 0.4284256 , Array2[0,2]=0.38090856 and Array2[1,2]= 0.32901526 

私は、forループを使用していますが、私は効率的な方法がなければならない考えています。 A1 and A2 values

for i in range(A1.shape[0]): 
    A2[ A1[i,0], A1[i,1] ] = A1[i,2] 
+0

あなたの新しい配列の形でしょうか? Array2の印刷例を教えてください。配列の形状を変更することは可能ですが、寸法に関する規則があります。 – armatita

+0

* Array1 *の最初の2つの要素を* Array2 *の座標にマップできます。私は**改造**があなたをここで助けるとは思わない。あなたはループスルーするのが最善でしょうし、短いコードには* list comprehension *を使ってください。 – davidshen84

+1

しかし、もし彼がそれをしたいのであれば、その3番目の要素はarray1の最後の行で、array2では1,2番目の位置にあるでしょうか?ルールは何ですか? – armatita

答えて

0

が、これはあなたが探しているものですか?ある配列の値を別の配列のInteger値を使って直接索引付けすることができます。

import numpy as np 
Array1 = np.array([ [ 0.,1.,0.4284256 ], [0.,2.,0.38090856], [1., 2.,0.32901526] ]) 
Array2 = np.zeros(Array1.shape) 
Array2[np.int_(Array1[:,0]),np.int_(Array1[:,1])] = Array1[:,2] 
print(Array2) 

、結果は次のとおりです。

[[ 0.   0.4284256 0.38090856] 
[ 0.   0.   0.32901526] 
[ 0.   0.   0.  ]] 
+0

3つ以上の行がある場合、urコードは動作しないと思います!今は3列あるので作業中です。 –

+0

インデックス作成は、任意の数の行に対して機能します。インデックスを作成する要素の数が、属性の値の数であることを確認するだけで済みます。命令の両側にインデックスを付けることができます。 – armatita

関連する問題