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

Python超大for循环运行过慢,如何大幅缩短4320个矩阵处理的计算耗时?

性能优化方案

你的代码慢的核心原因是用了极低效率的逐行append和纯Python嵌套循环,按照下面的优先级优化,预计耗时可以压缩到几分钟以内:

  • 最高优先级优化:废除循环内的pd.append操作
    pandas的append方法每次执行都会完整复制现有DataFrame的所有数据,随着数据量增长,单次append的耗时会越来越高,这是你代码跑9天只完成一半的核心原因。正确做法是先把所有行数据存在Python原生列表中,所有计算完成后一次性转为DataFrame,仅这一项优化就能带来至少百倍的提速。
  • 第二优先级优化:替换嵌套循环为向量化操作
    你用到的H、T参数是固定的等差网格,40×80的矩阵结构和网格完全对应,不需要用while循环逐点遍历,直接预先生成H、T序列,和展平后的功率矩阵直接匹配即可,向量化操作是numpy底层C实现,比纯Python循环快几十倍。
  • 第三优先级优化:删除冗余操作
    循环内的高频print操作、每次循环都创建空的energy_wave_period_converted DataFrame(你代码里根本没用这个变量)、逐点做float格式化这些冗余操作都可以删掉或放到最后统一处理,减少不必要的开销。

优化后参考代码

import numpy as np
import pandas as pd

# 预先定义固定参数,避免循环内重复计算
H_start=0.25
H_end=10
H_step=0.25
T_start=3
T_end=17
T_step=0.177

# 预先生成H、T序列,和矩阵维度完全匹配
H_seq = np.arange(H_start, H_end + H_step, H_step).round(2)
T_seq = np.arange(T_start, T_end + T_step, T_step).round(2)
# 校验维度和你的40*80矩阵匹配,不对的话微调下序列生成逻辑
assert len(H_seq) == 40 and len(T_seq) == 80, "参数序列长度和矩阵维度不匹配"

# 生成H、T网格
H_grid, T_grid = np.meshgrid(H_seq, T_seq, indexing='ij')
H_flat = H_grid.flatten()
T_flat = T_grid.flatten()

all_data = []
indice_4 = 0
configuration_id = -1
n_configurations = 4320            

for z in range(n_configurations):
    # 去掉高频print,真要监控可以每100次打印一次
    # if z % 100 == 0:
    #     print(z)
    power_matrix = P_mat[z].round(2)
    relative_direction = int(direc[z])
    if relative_direction == 0:         
        configuration_id += 1
        # print(configuration_id)
    
    # 展平功率矩阵,直接批量拼接数据
    power_flat = power_matrix.flatten()
    n_points = len(power_flat)
    # 生成当前配置的所有行数据
    config_ids = np.full(n_points, configuration_id)
    dir_ids = np.full(n_points, relative_direction)
    id_seq = np.arange(indice_4, indice_4 + n_points)
    
    # 批量加入列表
    current_data = np.column_stack([id_seq, config_ids, H_flat, T_flat, dir_ids, power_flat])
    all_data.extend(current_data.tolist())
    
    indice_4 += n_points

# 一次性生成DataFrame
seastate_productivity = pd.DataFrame(
    all_data,
    columns=['id','configuration_id','significant_wave_height','energy_wave_period','relative_direction','average_output_power']
)
# 统一转换数值类型
seastate_productivity = seastate_productivity.astype({
    'id': int,
    'configuration_id': int,
    'relative_direction': int
})
# 写入CSV
seastate_productivity.to_csv('seastate_productivity.csv',index=False,sep=';')

如果想要进一步提速,可以再结合多进程并行处理4320个矩阵的计算逻辑,耗时还能再降几倍。

内容的提问来源于stack exchange,提问作者Emanuele D'Argenzio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:15:02