2017-06-13 19 views
0

我有一個一個維數組(n)的多個維度稱爲邊緣,並希望通過從頂點數組的索引中插入值(N,3)獲取與numpy的TAKE功能

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(頂點,邊),但它不適用於多維數組。

+0

看上去是錯的:'[1.25,4321,-4]',可能是'4.321'? – Divakar

+0

「通過頂點數組中的索引插入值」是什麼意思? – user2357112

+0

爲什麼結果'[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規定使得最高層面這裏遵循的指標。

喜歡:

>>> 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 

事實上,baseNone意味着這並不生成視圖,它使基質的副本(與過濾/重新排序行)。您稍後對元素vertices所作的更改不會更改vertices[edges]結果的元素(假設您在更改vertices之前進行復制)。

+0

謝謝你的作品。 hpauljs解決方案似乎更快一點 –