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

高效填充DataFrame:将列表代码重构为ndarray优化方案

高效实现参数计算与DataFrame构建方案

核心思路

放弃逐行拼接DataFrame的低效方式,利用numpy向量化计算+一次性生成DataFrame的方案,直接处理大规模参数数据,效率能提升几个数量级。

具体实现步骤

  1. 将参数列表转为numpy数组
    numpy的向量化操作远快于Python列表循环,先把所有预存参数列表转成numpy数组:
import numpy as np
import pandas as pd

# 替换为你的实际参数列表变量名
newenergy_np = np.array(newenergy_grid)
damp1_np = np.array(damp1)
dsigma1_np = np.array(dsigma1)
# 其他参数(如damp2、dsigma2等)同理转成numpy数组
  1. 生成E和number_of_iteration列的数组
    假设每个E对应J次迭代(替换为你的实际迭代次数),用np.repeat和np.tile快速生成对应列数据:
J = 10  # 替换为实际迭代次数

# 每个E重复J次,对应J次迭代
E_col = np.repeat(newenergy_np, J)
# 生成每个E对应的迭代序号(1到J,可根据需求调整为0起始)
iteration_col = np.tile(np.arange(1, J+1), len(newenergy_np))
  1. 向量化计算所有result值
    将你的计算函数改造为支持numpy数组的向量化版本(避免用np.vectorize,它本质仍是循环),利用numpy广播机制一次性计算所有结果:
# 示例:假设你的计算逻辑涉及E、damp1、dsigma1三个参数
def compute_gaus_res(E, damp, dsigma):
    # 替换为你的实际计算逻辑,确保用numpy操作而非Python循环
    # 比如高斯函数示例:
    res = np.exp(-(E - 5)**2 / (2 * dsigma**2)) * damp
    return res

# 将参数数组扩展维度,支持广播(从(10000,)转为(10000,1))
E_expanded = newenergy_np[:, np.newaxis]
damp1_expanded = damp1_np[:, np.newaxis]
dsigma1_expanded = dsigma1_np[:, np.newaxis]

# 一次性计算所有(10000, J)的结果,再展平为一维数组
gaus_res_np = compute_gaus_res(E_expanded, damp1_expanded, dsigma1_expanded)
result_col = gaus_res_np.flatten()
  1. 一次性生成目标DataFrame
    直接用三个一维数组构建DataFrame,避免逐行拼接的开销:
df = pd.DataFrame({
    'E': E_col,
    'number_of_iteration': iteration_col,
    'result': result_col
})

关键注意事项

  • 如果原计算函数无法直接向量化,优先重构逻辑用numpy原生操作;若实在无法重构,可使用numba.jit装饰器加速循环,比np.vectorize效率更高。
  • 10000个E×100次迭代的规模(共1e6行),numpy和pandas完全可以轻松处理,内存占用也在可控范围内。
  • 确保所有参数数组的长度均为10000,与newenergy_grid的长度匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:01:31