假设我有一个数组,我希望通过索引矩阵从该数组中得到一个矩阵。
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)
然而它不起作用
是否有任何优雅的功能/方法?
答案 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]])