将python中的嵌套for循环向量化以进行索引相关函数

2024-10-03 00:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用NoPy数组向Python移植C++程序。我正在寻找一种方法,如果可能的话,以更python的方式实现以下循环:

for (int j = start_y; j < end_y; j++)
    {
        for (int i = start_x; i < end_x; i++)
        {
            plasmaFreq[i][j] = plasmaFreq_0*(tanh((i - 50)/10) - tanh((i - (nx - 50))/10))/2.0;
        }
    }

上面,plasmaFreq_0是一个传递到周围函数的常数,nx也是。显然,将循环边界向量化以操作numpy数组的特定区域是很容易的,但这就给我留下了一个问题,即如何在数组中映射上述依赖于索引的函数。在


Tags: 方法函数程序for方式常数数组start
1条回答
网友
1楼 · 发布于 2024-10-03 00:21:18

你需要一个数组i

i = np.arange(start_x, end_x)
plasmaFreq[start_x:end_x, start_y: end_y] = plasmaFreq_0 *(np.tanh((i - 50)/10) - np.tanh((i - (nx - 50))/10))/2.0

我认为广播应该从那里开始。在


请注意,您的原始代码非常低效1。。。首先,计算每个j的右侧,但它不依赖于j,因此只需要计算一次。其次,你的内部循环在慢索引之上,所以你不能有效地使用你的缓存。我可能会这样写:

^{pr2}$

1效率如何取决于编译器在计算循环方面的能力。也许有一天,有些编译器可以从你和我的编译器中生成相同的代码

相关问题 更多 >