numpy:有没有办法从没有外部循环的映射序列创建数组?

时间:2018-02-19 08:02:40

标签: python arrays numpy indices creation

对我来说,这听起来像是一个常见的用例,但我还是找不到合适的函数/线程。

我有两个numpy数组,一个是三元组序列,另一个是相关的索引序列。我想创建一个序列长度相等的1-dim数组,根据它们的索引由映射项组成。

示例:

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功能,没有外部循环且没有超出临时阵列的内存使用量?

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找有关索引的numpy文档的this part

In [17]: mapping[(np.arange(indices.shape[-1]),indices)]
Out[17]: array([ 25, 177,   0,   10])

这会创建一个临时数组(np.arange),但它是1维的,我想不出更好的东西。