Python - 通过索引矩阵构造矩阵

时间:2016-02-01 21:42:29

标签: python

假设我有一个数组,我希望通过索引矩阵从该数组中得到一个矩阵。

import numpy as np
arr = np.array([1,5])
mtxidx = np.array([[0,1,0],[0,1,1],[0,0,0]])

如何获得矩阵[[1,5,1],[1,5,5],[1,1,1]]?

最初的想法就是说

arr(mtxidx)

然而它不起作用

是否有任何优雅的功能/方法?

3 个答案:

答案 0 :(得分:4)

"Fancy" indexing适用于我(在您的问题中,您试图调用数组对象(圆括号)但是NumPy“ndarray”对象不可调用):

In [61]: arr[mtxidx]
Out[61]: 
array([[1, 5, 1],
       [1, 5, 5],
       [1, 1, 1]])

答案 1 :(得分:1)

你最初的想法非常接近,只需用[]替换括号就可以了。 arr[mtxidx]

列表理解也可以。

>>> np.array([arr[row] for row in mtxidx])
array([[1, 5, 1],
       [1, 5, 5],
       [1, 1, 1]])

答案 2 :(得分:0)

我赞成@xnx提出的花哨索引,但是如果你在相同的范围内做了一些事情但涉及一个操作(或者其他的东西),你也可以试试这个:

arr = np.array([1,5])
mtxidx = np.array([[0,1,0],[0,1,1],[0,0,0]])

def func(v):
    return arr[v]

vfunc = np.vectorize(func)
vfunc(mtxidx)
# array([[1, 5, 1],
#        [1, 5, 5],
#        [1, 1, 1]])