为什么双切片numpy数组的赋值不起作用?

Phi*_*erg 10 python numpy variable-assignment slice

为什么以下几行不能按预期工作?

import numpy as np
a = np.array([0,1,2,1,1])
a[a==1][1:] = 3
print a
>>> [0 1 2 1 1]
# I would expect [0 1 2 3 3]
Run Code Online (Sandbox Code Playgroud)

这是一个'错误'还是有另一种推荐方式?

另一方面,以下工作:

a[a==1] = 3
print a
>>> [0 3 2 3 3]
Run Code Online (Sandbox Code Playgroud)

干杯,菲利普

rob*_*nce 10

这与花哨索引的工作原理有关.有一个详尽的解释在这里.这样做是为了允许使用花式索引进行原位修改(即a[x>3] *= 2).这样做的结果是你不能像你找到的那样分配一个双索引.花式索引始终返回副本而不是视图.


Dav*_*sta 7

看起来你根本不能通过这样的双切片进行赋值.

这有效:

a[numpy.where(a==1)[0][1:]] = 3
Run Code Online (Sandbox Code Playgroud)