gpt4 book ai didi

python - 迭代第二个 numpy 数组时对一个 numpy 数组进行条件判断

转载 作者:太空宇宙 更新时间:2023-11-03 14:41:11 26 4
gpt4 key购买 nike

我通读了 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

我在引用 if 语句时收到以下错误:“IndexError:索引 10 超出大小为 5 的轴 0 的范围”。

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

最佳答案

您当前在 np.nditer 中遇到 IndexError 的原因是该函数正在迭代 中的项目>array1 而不是索引。由于第一项是 10,因此您正在尝试访问 array2[10]

实现此目的的快速方法是使用条件索引,而不是for循环。例如,如果您想将某个函数 f 应用于 array1,其中 array2 小于 0,而另一个函数 g 对于所有其他地方,假设 fg 被编写为接受并返回 numpy 数组,您将编写

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

这比使用 for 循环运行得快得多,因为迭代发生在 C 级别而不是 Python 中。您可以使用这种形式编写几乎任何一组按元素操作,而无需 for 循环。

关于python - 迭代第二个 numpy 数组时对一个 numpy 数组进行条件判断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46532752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com