对我来说,这听起来像是一个普通的用例,但是我仍然找不到适合的功能/线程。
我有两个numpy数组,一个是三元组序列,另一个是相关的索引序列。我想创建一个等长序列的1维数组,该数组由映射项根据它们的索引组成。
例:
mapping = np.array(((25, 120, 240), (18, 177, 240), (0, 0, 0), (10, 120, 285)))
indices = np.array((0, 1, 0, 0))
print "mapping:", mapping
print "indices:", indices
print "mapped:", mapping[indices]
产生以下输出:
mapping: [[ 25 120 240]
[ 18 177 240]
[ 0 0 0]
[ 10 120 285]]
indices: [0 1 0 0]
mapped: [[ 25 120 240]
[ 18 177 240]
[ 25 120 240]
[ 25 120 240]]
当然,根据索引数组,此方法将整个映射数组视为一个映射,而不是映射列表,仅返回第一个或第二个内部映射。但是我一直在寻找的是:
mapped: [25 177 0 10]
...由第一个映射的第一个项目,第二个映射的第二个以及第三个和第四个映射的第一个组成。
有没有一种精简的方法可以单独使用numpy功能来做到这一点,而无需外部循环,也不会为临时数组占用过多的内存?
我认为您正在寻找numpy关于索引的文档的这一部分。
In [17]: mapping[(np.arange(indices.shape[-1]),indices)]
Out[17]: array([ 25, 177, 0, 10])
这会创建一个临时数组(np.arange
),但它是一维的,我想不到更好的方法了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句