为什么我希望下面的行不行?

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[numpy.where(a==1)[0][1:]] = 3

其他提示

它涉及到如何花哨的索引原理。有一个详尽的解释这里。它这样做的方式,让花哨的索引就地修改(即a[x>3] *= 2)。这样做的结果是,你不能分配给双指数你已经找到。花式索引总是返回一个副本,而不是图。

由于所述一个并[a == 1]的部分是不实际的切片。它创建了一个新的数组。这是有道理的,当你想想它 - 你只考虑满足布尔条件(如过滤器操作)的元素。

这你想要做什么

a[2:][a[2:]==1]=3
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top