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

Matlab转Python:如何将波浪参数及RAO计算结果保存至CSV文件

刚从MATLAB转Python的时候,我也在批量数据存CSV这件事上卡过壳,结合你的需求,给你两个实用的解决方案,都是Python里常用的方法:

方案1:用Pandas(推荐,处理表格数据最省心)

Pandas是Python处理结构化数据的神器,完全适配你要的「每行对应一次计算任务,列包含各类参数」的格式,步骤非常清晰:

步骤说明:

  1. 先确保你已经安装了pandas(没装的话用pip install pandas搞定)
  2. 把所有计算好的数组整理成字典(键是CSV的列名,值是对应的数据数组)
  3. 转换成DataFrame后直接导出成CSV

示例代码:

import pandas as pd

# 假设你已经有了所有计算好的数组:period(波周期), k(波数), wave(波参数), rao_2/3/4(各类RAO)
# 如果是在循环里计算的,可以先把每个结果存进列表,最后转成数组
# 比如循环收集数据的方式:
# period_list = []
# k_list = []
# wave_list = []
# rao_2_list = []
# rao_3_list = []
# rao_4_list = []
# for j in range(len(wave_data)):
#     # 计算当前j对应的各项参数
#     period_list.append(period[j])
#     k_list.append(k[j])
#     wave_list.append(wave[j])
#     rao_2_list.append(sway[j]/wave[j])
#     rao_3_list.append(heave[j]/wave[j])
#     rao_4_list.append(roll[j]/(k[j]*wave[j]))

# 整理成字典(键就是CSV的列名)
data_dict = {
    'Period': period,  # 或者period_list,如果是用列表收集的
    'Wave Number': k,
    'Wave': wave,
    'RAO_Sway': rao_2,
    'RAO_Heave': rao_3,
    'RAO_Roll': rao_4
}

# 转换成DataFrame
df = pd.DataFrame(data_dict)

# 导出成CSV,index=False表示不保存行索引,完全符合你的需求
df.to_csv('wave_rao_results.csv', index=False, encoding='utf-8')

方案2:用Python内置csv模块(无需额外安装依赖)

如果你不想装第三方库,用Python自带的csv模块也能搞定,适合对环境依赖有要求的场景:

示例代码(循环写入每行):

import csv

# 定义CSV的列名
field_names = ['Period', 'Wave Number', 'Wave', 'RAO_Sway', 'RAO_Heave', 'RAO_Roll']

# 打开文件并写入
with open('wave_rao_results.csv', 'w', newline='', encoding='utf-8') as csv_file:
    # 创建字典写入器,自动处理表头
    writer = csv.DictWriter(csv_file, fieldnames=field_names)
    writer.writeheader()  # 写入表头
    
    # 循环写入每一行数据
    for j in range(len(wave)):
        # 避免除以0的情况,可以加个判断
        if wave[j] == 0 or k[j] == 0:
            rao_sway = float('nan')
            rao_heave = float('nan')
            rao_roll = float('nan')
        else:
            rao_sway = sway[j]/wave[j]
            rao_heave = heave[j]/wave[j]
            rao_roll = roll[j]/(k[j]*wave[j])
        
        writer.writerow({
            'Period': period[j],
            'Wave Number': k[j],
            'Wave': wave[j],
            'RAO_Sway': rao_sway,
            'RAO_Heave': rao_heave,
            'RAO_Roll': rao_roll
        })

额外提醒:

  • 不管用哪种方法,所有数据数组/列表的长度必须一致,否则会出现行数不匹配的错误
  • 一定要处理wave[j]或k[j]为0的情况,避免触发ZeroDivisionError导致程序崩溃
  • 如果你的数据是numpy数组,两种方案都能直接兼容,不需要额外转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:45:21