You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中无for循环实现求和(Σ)及G''方程计算?

Python中无for循环实现G''方程的最简方法

问题描述

需要在Python中不使用for循环实现G''方程的计算,当前已通过嵌套for循环完成实现,希望得到更简洁的无循环方案。

原实现代码

import numpy as np
import numpy as np
import pandas as pd
import math
import scipy.optimize as spo
from matplotlib.backend_bases import key_press_handler
import matplotlib.pyplot as plt
from matplotlib.figure import Figure


N_Prony = 2

w = [10, 20, 30, 50, 60]
g = [0.1, 0.1, 0.1]

tau = [0.5, 0.5, 0.5]

G0 = 10

list2=[]

for J in range(len(w)):  
    for i in range(N_Prony):
        GPrime_2 =   G0*((g[i]*((tau[i]))*w[J])/(1+((tau[i]**2))*w[J]**2)*N_Prony) 
    list2.append(GPrime_2)

无循环优化方案

先指出原代码的几个问题:

  • 重复导入了numpy库
  • N_Prony=2但g、tau长度为3,循环仅取前2个元素,逻辑存在不一致
  • 嵌套循环中每次迭代会覆盖GPrime_2,最终仅保留每个w[J]对应的最后一个i的计算结果,不符合G''方程通常的累加逻辑

利用numpy的向量化运算可完全替代for循环,实现高效简洁的计算:

import numpy as np

N_Prony = 2
w = np.array([10, 20, 30, 50, 60])
# 取前N_Prony个g和tau元素,与原循环逻辑对齐
g = np.array([0.1, 0.1])[:N_Prony]
tau = np.array([0.5, 0.5])[:N_Prony]
G0 = 10

# 利用numpy广播机制完成多维度运算
numerator = g * tau * w[:, np.newaxis]
denominator = 1 + (tau * w[:, np.newaxis])**2
# 对每个w对应的所有Prony项求和,再完成最终计算
G_double_prime = G0 * np.sum(numerator / denominator, axis=1) * N_Prony

print(G_double_prime)

核心说明

  • 将所有输入转为numpy数组,借助广播特性自动匹配维度,无需手动编写循环
  • w[:, np.newaxis]将一维的w转为列向量,与一维的g、tau运算时,会自动扩展为(5,2)的矩阵,对应每个w值与每个Prony项的组合计算
  • np.sum(..., axis=1)完成每个w对应的Prony项累加,符合G''方程的数学逻辑
  • 代码简洁度、运算效率远高于for循环,数据量越大优势越明显

内容的提问来源于stack exchange,提问作者Mhmoud Khadija

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:30:49