Python 迭代第二个numpy数组时在一个numpy数组上的条件

Python 迭代第二个numpy数组时在一个numpy数组上的条件,python,arrays,numpy,for-loop,iteration,Python,Arrays,Numpy,For Loop,Iteration,我通读了numpy文档,特别是当它涉及到在for循环中迭代Ndarray时。通读类似的S.O.帖子,但我仍然没能解决一个相对直截了当的问题 我希望在迭代不同的ndarray时,在元素方面合并基于一个ndarray值的条件。这是我的密码: import numpy as np array1 = np.array([10,20,30,40,50]) array2 = np.array([-1,-1,1,0,1]) for x in np.nditer(array1,flags=['refs_ok']

我通读了numpy文档,特别是当它涉及到在for循环中迭代Ndarray时。通读类似的S.O.帖子,但我仍然没能解决一个相对直截了当的问题

我希望在迭代不同的ndarray时,在元素方面合并基于一个ndarray值的条件。这是我的密码:

import numpy as np
array1 = np.array([10,20,30,40,50])
array2 = np.array([-1,-1,1,0,1])
for x in np.nditer(array1,flags=['refs_ok']):
    if array2[x] < 0:
       #code-block here executing several tasks
将numpy导入为np
array1=np.数组([10,20,30,40,50])
array2=np.数组([-1,-1,1,0,1])
对于np.nditer中的x(数组1,标志=['refs_ok']):
如果阵列2[x]<0:
#这里的代码块执行多个任务
关于if语句,我得到了以下错误:“IndexError:index 10超出了大小为5的轴0的界限”


代码块必须以时间序列的方式执行,因此for循环。不确定发生了什么。

当前使用
np.nditer获得
索引器的原因是该函数正在迭代
数组1中的项,而不是索引。由于第一项是
10
,因此您正在尝试访问
array2[10]

实现这一点的快速方法是使用条件索引,而不是
for
循环。例如,如果要将某个函数
f
应用于
array1
中的
array2
小于0的位置,并将另一个函数
g
应用于所有其他位置,假设
f
g
被写入以接收并返回numpy数组,则需要编写

array1[array2 < 0] = f(array1[array2 < 0])
array1[array2 >= 0] = g(array1[array2 >= 0])
array1[array2<0]=f(array1[array2<0])
array1[array2>=0]=g(array1[array2>=0])

这将比使用
for
循环运行得快得多,因为迭代是在C级而不是在Python中进行的。您可以使用此表单编写几乎任何一组元素操作,而无需
进行循环。

nditer
不适合初学者。如果您必须迭代,请使用普通Python循环(我在范围内…)。很好的建议,谢谢,是的,我自己应该看到的。伟大的建议:条件索引Jeremy。再次感谢。以下方法似乎也能起作用:对于idx,枚举(array1)中的x:如果array2[idx]<0:#执行代码块yes,这将起作用!但是,如果您计划使用大型数组(尤其是多维数组),我强烈建议使用条件索引。阅读起来更清晰,执行起来更快。如果我已经回答了你的问题,请将其标记为已回答!如果没有,请告诉我遗漏了什么。