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

Gig*_*ggi 5 python arrays indexing numpy

例如,Numpy数组允许索引列表

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

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

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

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

IndexError: too many indices
Run Code Online (Sandbox Code Playgroud)

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

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

不要忘记切片的使用会产生非常快的代码; 我的问题是拥有尽可能快的代码.

Lev*_*sky 4

我想到了什么:

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

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

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

%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
Run Code Online (Sandbox Code Playgroud)