Matlab转Python:如何将波浪参数及RAO计算结果保存至CSV文件
刚从MATLAB转Python的时候,我也在批量数据存CSV这件事上卡过壳,结合你的需求,给你两个实用的解决方案,都是Python里常用的方法:
方案1:用Pandas(推荐,处理表格数据最省心)
Pandas是Python处理结构化数据的神器,完全适配你要的「每行对应一次计算任务,列包含各类参数」的格式,步骤非常清晰:
步骤说明:
- 先确保你已经安装了pandas(没装的话用
pip install pandas搞定) - 把所有计算好的数组整理成字典(键是CSV的列名,值是对应的数据数组)
- 转换成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
相关产品推荐
相关产品推荐

