python - numpy 数组的列表索引中的多个切片

标签 python arrays numpy indexing

Numpy 数组接受一个索引列表,例如

a = np.arange(1000)
l = list([1,44,66,33,90,345])
a[l] = 22

但是,如果我们想使用多切片索引或索引加切片,则此方法不起作用。

a = np.arange(1000)
l = list([1,44,66,33,90, slice(200,300) , slice(500,600) ])
a[l] = 22

此代码返回一条错误消息:

IndexError: too many indices

我的问题很简单: 你知道在 numpyscipy 中是否存在使用这种索引的有效方法吗?

或者什么是使用像这样的索引方法的好而有效的方法?

不要忘记使用切片会产生非常快的代码;我的问题是尽可能快地编写代码。

最佳答案

我想到了什么:

a = np.arange(1000)
l = np.hstack(([1, 44, 66, 33, 90], np.arange(200, 300), np.arange(500, 600)))
a[l] = 22

我不确定这是否是最简单的方法,但它确实有效。

编辑:你是对的,这比使用切片慢;但是您不能创建具有任意值的切片对象。也许你应该只做几项作业:

%timeit a[np.hstack(([1, 44, 66, 33, 90], np.arange(200, 300), np.arange(500, 600)))] = 22
10000 loops, best of 3: 39.5 us per loop

%timeit a[[1, 44, 66, 33, 90]] = 22; a[200:300] = 22; a[500:600] = 22
100000 loops, best of 3: 18.4 us per loop

关于python - numpy 数组的列表索引中的多个切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13525266/

相关文章:

python - 如何通过 Python 子进程杀死 omxplayer

Python 字符串查找

c - 对 2D 字符数组执行选择排序

python - 如何设置误差线上限的线宽

C++多维数组存储字符串

javascript - 使用 JavaScript 的 IndexOf 在数组中查找数组

python - Numpy Broadcasting Answer 的解释

python - 给定一个单位向量,找出使该向量与轴对齐的两个旋转角度

python - 在python中高效生成 "shifted"高斯核

python - 值错误: Found unknown categories while calling cross_val_score