MATLAB读取CSV:结构体转double及数组切片实现方案咨询
在MATLAB中实现与Python等效的CSV读取及数组切片操作
直接读取CSV并完成切片的正确方法
你之前的代码失效主要有两个核心问题:
readtable返回的是表格对象(table),并非数值数组,无法像Python的numpy数组那样直接进行数组切片;- MATLAB采用1起始索引,且切片为闭区间,和Python的0起始、左闭右开切片逻辑完全不同。
改用readmatrix(MATLAB R2019a及以上版本支持)可直接读取CSV为double类型的数值数组,完全匹配Python中np.loadtxt的返回结果,再按MATLAB的索引规则完成切片:
% 读取CSV为double数值数组 data = readmatrix('datafile.csv'); % 对应Python的sub_arr_1 = df[0:4, 0:4] % Python的0:4取前4行/列(索引0-3),对应MATLAB的1:4 a1 = data(1:4, 1:4); % 对应Python的sub_arr_2 = df[:, 4:8] % Python的4:8取第4到第7列,对应MATLAB的5:8 a2 = data(:, 5:8); % 对应Python的sub_arr_3 = df[:, 8:12] % Python的8:12取第8到第11列,对应MATLAB的9:12 a3 = data(:, 9:12);
若你的MATLAB版本较旧(无readmatrix),可使用csvread替代:
data = csvread('datafile.csv'); % 切片逻辑与上述一致
可选方案:转为.mat文件操作
如果你偏好使用.mat格式,有两种实现方式:
- 在Python中转换后导入MATLAB
import numpy as np import scipy.io as sio df = np.loadtxt(open("datafile.csv", "rb"), delimiter=",") sio.savemat('datafile.mat', {'data': df})
在MATLAB中加载并操作:
load('datafile.mat'); a1 = data(1:4, 1:4); % 其余切片操作同上
- 在MATLAB中读取后保存为.mat
data = readmatrix('datafile.csv'); save('datafile.mat', 'data'); % 后续直接load即可使用
内容的提问来源于stack exchange,提问作者merkle
相关产品推荐
相关产品推荐

