繁体   English   中英

使用长度可变的数组列表索引一维数组

[英]Indexing 1-D array using list of arrays with varying lengths

我想做的例子:

import numpy as np

values = np.array([7, 7, 5, 2, 3, 9])
indices = np.array([
    np.array([3,5]), 
    np.array([4]),
    np.array([1,2,3])
    ])

>>> values[indices]
array([
    array([2,9]), 
    array([3]),
    array([7,5,2]),
    ])

是否可以使用向量化来实现? 现在,我正在使用for循环,但是它会变慢。

谢谢!

我们可以将索引连接起来,使用这些索引将其索引为values ,最后再拆分回-

idx = np.concatenate(indices)
all_out = values[idx]
lens = list(map(len,indices))
ssidx = np.r_[0,lens].cumsum()
out = [all_out[i:j] for (i,j) in zip(ssidx[:-1],ssidx[1:])]

为了完整起见,这是基于直接索引的版本-

[values[i] for i in indices]

因此,通过提出的方法,我们正在使用切片,从而减少了每次迭代的工作量。 因此,非常久远的步骤得到idx需要在提出一个所有指数的级联,它是有道理的,在小数组索引的情况下indices

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM