避免多个嵌套的 for 循环

马克·施万巴赫

如果我不能准确地将我的问题与我的标题综合起来,请原谅,但是我想通过解释它,事情会变得更清楚。

我的问题是我必须使用一组数组的每个组合来执行计算,然后将相应的结果存储在每个循环的数组中,以及用于计算的参数。随后,我会将 NumPy 数组和相应的计算结果存储在一个 Pandas 数据帧中

我试图尽可能避免 for 循环,但我不确定是否还有其他方法可以使用我仍然不知道的 Pandas 或 python 方法来实现我的目标。我试图解决的问题自然更复杂,并且会涉及更多的数组以及更复杂的数据。所以,总而言之,我的问题是是否有其他聪明的方法来避免我一直在做的事情。

我一直在处理的代码 - 以一种非常 matlab 的方式编写 - 具有与以下类似的逻辑(这只是一个说明性的简单示例):

max_x = 5
min_x = 1
x_1 = np.linspace(min_x, max_x, 5)
x_2 = np.linspace(min_x, max_x, 5)
x_3 = np.linspace(min_x, max_x, 5)
x_4 = np.linspace(min_x, max_x, 5)

x_result = np.array([])
x1 = np.array([])
x2 = np.array([])
x3 = np.array([])
x4 = np.array([])

for i in range(0,len(x_1)):
    for j in range(0,len(x_2)):
        for k in range(0,len(x_3)):
            for l in range(0, len(x_4)):
                        x_set = [x_1[i],x_2[j],x_3[k], x_4[l]]
                        x_calc = calculation_1(arg = x_set)                             
                        x1 = np.append(x1, x_1[i])
                        x2 = np.append(x2, x_2[j])
                        x3 = np.append(x3, x_3[k])
                        x4 = np.append(x4, x_4[l])
                        x_result = np.append(x_result, x_calc)

df_x = pd.DataFrame(np.array([x1, x2, x3, x4, x_result])).T
威廉·范·翁塞姆

如果我理解正确,您想用数组实现某种笛卡尔积我们可以通过使用来做到这一点np.meshgrid,例如:

def cartesian_product(*arrs):
    return np.transpose(np.meshgrid(*arrs)).reshape(-1, len(arrs))

例如:

>>> x_1 = [1,2,3]
>>> x_2 = [3,4]
>>> x_3 = [5]
>>> cartesian_product(x_1, x_2, x_3)
array([[1, 3, 5],
       [1, 4, 5],
       [2, 3, 5],
       [2, 4, 5],
       [3, 3, 5],
       [3, 4, 5]])

然后,您可以通过 引导此交叉产品的项目calculation_1,例如np.apply_along_axis(..)

np.apply_axis(calculation_1, 1, c)

然后我们可以将该结果添加为新列,例如sum

>>> c = cartesian_product(x_1, x_2, x_3)
>>> np.hstack((c, np.apply_axis(sum, 1, c)[:, None]))
array([[ 1,  3,  5,  9],
       [ 1,  4,  5, 10],
       [ 2,  3,  5, 10],
       [ 2,  4,  5, 11],
       [ 3,  3,  5, 11],
       [ 3,  4,  5, 12]])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python避免多个嵌套循环

来自分类Dev

Python:避免使用多个嵌套的for循环迭代字符串

来自分类Dev

试图避免嵌套的循环

来自分类Dev

避免在R中嵌套for循环,在多个条件下跨多个数据帧进行匹配

来自分类Dev

避免在R中嵌套for循环,在多个条件下跨多个数据帧进行匹配

来自分类Dev

避免在R中嵌套for循环,在多个条件下跨多个数据帧进行匹配

来自分类Dev

避免在R中嵌套for循环,在多个条件下跨多个数据帧进行匹配

来自分类Dev

Python,避免丑陋的嵌套循环

来自分类Dev

R-避免嵌套循环

来自分类Dev

Pandas:如何避免嵌套 for 循环

来自分类Dev

避免 setTimeOut 循环多个实例

来自分类Dev

搜索参数空间时避免嵌套的for循环

来自分类Dev

避免在for循环中更新嵌套列表

来自分类Dev

如何避免嵌套的for-each循环?

来自分类Dev

在矩阵索引求和时避免嵌套循环

来自分类Dev

避免在嵌套循环python中重复

来自分类Dev

Perl;如何避免严重嵌套的foreach循环

来自分类Dev

搜索参数空间时避免嵌套的for循环

来自分类Dev

构建导航时如何避免嵌套循环?

来自分类Dev

为循环嵌套多个条件

来自分类Dev

如何嵌套多个parfor循环

来自分类Dev

递归代替多个嵌套的for循环?

来自分类Dev

R-多个嵌套循环

来自分类Dev

Excel VBA多个/嵌套循环

来自分类Dev

嵌套循环:多个模型参数

来自分类Dev

优化循环/嵌套循环

来自分类Dev

与tbb并行执行多个嵌套循环

来自分类Dev

多个嵌套循环无法按预期工作

来自分类Dev

多个嵌套循环的数学等效项