为什么以下几行不能按我的预期工作?
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]
这是一个“错误”还是有另一种推荐的方法?
另一方面,以下工作:
a[a==1] = 3
print a
>>> [0 3 2 3 3]
干杯,菲利普
为什么以下几行不能按我的预期工作?
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]
这是一个“错误”还是有另一种推荐的方法?
另一方面,以下工作:
a[a==1] = 3
print a
>>> [0 3 2 3 3]
干杯,菲利普
这与花哨的索引如何工作有关。这里有详尽的解释。这样做是为了允许使用花哨的索引(即a[x>3] *= 2
)进行就地修改。这样做的结果是您无法分配给您找到的双索引。花式索引总是返回一个副本而不是一个视图。
看来您根本无法通过这样的双切片进行分配。
这虽然有效:
a[numpy.where(a==1)[0][1:]] = 3
因为 a[a==1] 部分实际上并不是一个切片。它创建一个新数组。当您考虑它时,这是有道理的——您只采用满足布尔条件的元素(如过滤器操作)。
这做你想要的
a[2:][a[2:]==1]=3