2017-06-13 7 views
0

numpyのテイク機能を持つ複数の次元を取得と呼ばれるエッジと頂点の配列からインデックスで値を挿入する(、nは3)I(n)は1次元配列を持っている

vertices = [[ 1.25, 4.321, -4], [2, -5, 3.32], [23.3, 43, 12], [32, 4, -23]] 

edges = [1, 3, 2, 0] 


result = [[2, -5, 3.32], [32, 4, -23], [23.3, 43, 12], [ 1.25, 4.321, -4]] 

私はnp.take(vertices、edges)を試しましたが、多次元配列では機能しません。

+0

に動作します: '[1.25、4321、-4]'、 '4.321'だろうか? – Divakar

+0

"インデックスを頂点配列から挿入する"とはどういう意味ですか? – user2357112

+0

そして結果の3番目の要素はなぜ '[2、-5、3.32]'ですか? – user2357112

答えて

2

takeは間違っているようだそれ

In [313]: vertices=np.array(vertices) 
In [314]: edges=[1,3,2,0] 
In [315]: np.take(vertices, edges,0) 
Out[315]: 
array([[ 2. , -5. , 3.32 ], 
     [ 32. , 4. , -23. ], 
     [ 23.3 , 43. , 12. ], 
     [ 1.25 , 4.321, -4. ]]) 
In [316]: vertices[edges,:] 
Out[316]: 
array([[ 2. , -5. , 3.32 ], 
     [ 32. , 4. , -23. ], 
     [ 23.3 , 43. , 12. ], 
     [ 1.25 , 4.321, -4. ]]) 
2

あなたは単にここインデックスを使用することができます。

vertices[edges] 
#  ^ ^indexing

リストとインデックス、その後、numpyのはedgesで指定された最高の寸法は、ここでインデックスを次のように元の行列を改造なります。

よう:baseNoneであるという事実は、これがビューを生成ないことを意味

>>> vertices = np.array([[ 1.25, 4.321, -4], [2, -5, 3.32], [23.3, 43, 12], [32, 4, -23]]) 
>>> edges = [1, 3, 2, 0] 
>>> vertices[edges] 
array([[ 2. , -5. , 3.32 ], 
     [ 32. , 4. , -23. ], 
     [ 23.3 , 43. , 12. ], 
     [ 1.25 , 4.321, -4. ]]) 
>>> vertices[edges].base is None 
True 

、それが(フィルタリング/並べ替え行で)行列のコピーを作成します。したがって、後で要素に変更するverticesの場合、vertices[edges]の結果の要素は変更されません(verticesを変更する前にコピーを作成した場合)。軸パラメータと

+0

ありがとうございます。それはhpauljsソリューションのように思える少し速いです –

関連する問題