Python Numpy:按索引和条件更改Numpy数组中的值

Python Numpy:按索引和条件更改Numpy数组中的值,python,numpy,Python,Numpy,我是numpy新手,在简单管理numpy阵列方面遇到了麻烦 我正在做一项任务,其中说必须尽可能避免循环,我需要通过另一个索引数组编辑数组的值 indexes # [3, 16] y # [0. 1. 1. 1. 0. 1. 0. 0. 0. 0. 1. 1. 1. 0. 1. 0. 0. 0. 1. 1.] y[indexes] = 2 # [0. 1. 1. 2. 0. 1. 0. 0. 0. 0. 1. 1. 1. 0. 1. 0. 2. 0. 1. 1.] 但我不需要简单地将值更改为2。

我是numpy新手,在简单管理numpy阵列方面遇到了麻烦

我正在做一项任务,其中说必须尽可能避免循环,我需要通过另一个索引数组编辑数组的值

indexes # [3, 16]
y # [0. 1. 1. 1. 0. 1. 0. 0. 0. 0. 1. 1. 1. 0. 1. 0. 0. 0. 1. 1.]
y[indexes] = 2 # [0. 1. 1. 2. 0. 1. 0. 0. 0. 0. 1. 1. 1. 0. 1. 0. 2. 0. 1. 1.]
但我不需要简单地将值更改为2。我需要做一个有条件的改变。这就是我所拥有的,但我需要这样的东西

y[indexes] = 0 if y[indexes] == 1 else 0 
>>> [0. 1. 1. 0. 0. 1. 0. 0. 0. 0. 1. 1. 1. 0. 1. 0. 1. 0. 1. 1.]
上面这一行应该是结果

这是循环方式的答案,但如果存在,我需要一个numpy方式:

for index in indexes:
    y[index] = 1 if y[index] == 0 else 0

提前谢谢。

我不知道我是否理解你的问题。但我希望这对你有帮助

提示01 数组([0,1,1,0,3,0,1,0,1,0])


数组([0,0,0,0,3,0,0,0,0,0])

您的原始答案(
y[index]=2
)避免循环--您到底需要更改什么?因为这不是我需要的,我需要根据条件更改值,而不是2。例如:
y[index]=1如果y[index]=0或者0
,你明白吗?你是否阅读了
np.where()
?@rahlf23是的,但我不知道如何在条件
np中引入索引。其中([基于元素索引的条件],索引,如果索引==0或者0,则为1)
如@rahfl23所述,
y[index]=np.where(y[索引]==0,1,0)
应该可以工作(尽管您需要先将
y
转换为数组:
y=np.array(y)
import numpy as np 
indexes = [1, 5, 7] # index list
y = np.array([9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]) #array example
y[indexes][2] #3rd(0,1,>>2<<) item of y array (1,5,>>7<<). 
y = np.array([0,1,1,0,3,0,1,0,1,0])
y
np.where(y != 1, y, 0)
y