0

我尝试搜索,但未能解决我的特定问题。我应该提一下,我对 MATLAB 相当陌生,所以这可能是显而易见的,但已经从我的脑海中溜走了。

我有一个 Excel 文件,其中包含 5 个事件的加速度计记录,中间有一些空间。这些事件发生在我必须指定的时间(即行),例如 120:250、280:390、430:943 等等。

我想做的是能够循环并提取所需的数据,并将其存储在变量中,这样每个事件都会有它自己的“部分”,如果你愿意的话,每个“部分”都会包含它自己的集合带有 X、Y、Z 加速度计数据的“子部分”。

我目前的设置是手动设置,它看起来像这样:

X1 = xlsread('location.xlsx','sheet1','d110:d367');
X2 = xlsread('location.xlsx','sheet1','d367:d631');
X3 = xlsread('location.xlsx','sheet1','d631:d891');
X4 = xlsread('location.xlsx','sheet1','d891:d1134');
X5 = xlsread('location.xlsx','sheet1','d1134:d1361');

Y1 = xlsread('location.xlsx','sheet1','e110:e367');
Y2 = xlsread('location.xlsx','sheet1','e367:e631');
Y3 = xlsread('location.xlsx','sheet1','e631:e891');
Y4 = xlsread('location.xlsx','sheet1','E891:e1134');
Y5 = xlsread('location.xlsx','sheet1','e1134:e1361');

Z1 = xlsread('location.xlsx','sheet1','f110:f367');
Z2 = xlsread('location.xlsx','sheet1','f367:f631');
Z3 = xlsread('location.xlsx','sheet1','f631:f891');
Z4 = xlsread('location.xlsx','sheet1','f891:f1134');
Z5 = xlsread('location.xlsx','sheet1','f1134:f1361');

所以你可以看到它是多么不利。我想做的另一件事是最终使用循环与其他数据集进行互相关,但是在处理“动态”变量或你有什么时,我再次不确定循环的性质。

现在我正在考虑这样做的方式是我在向量或类似的东西中指定行块,然后循环遍历每个活动,然后遍历每个轴。

4

1 回答 1

0

为每个变量运行 XLSREAD 对性能来说不是最优的。该函数使用 COM 接口(至少在 Windows 下)并且速度较慢。如果数据不是很大并且可以放入内存,最好一次将整个工作表读取到一个临时变量中,然后将值排序到变量中。

另一个建议是不要使用 X1、X2 等。如果你想在循环中使用这些变量,你会遇到问题。如果它们具有不同的长度,则创建一个元胞数组,因此它们将变为 X{1}、X{2} 等。

所以,首先阅读整个文件:

data = xlsread('location.xlsx','sheet1','D:F');

如果您数据所有数字,您将在data矩阵中获得它们。

您可以手动输入或从数据中获取的索引。

index = {120:250, 280:390, 430:943};
for ii = 1:numel(index)
    X{ii} = data(index{ii},1);
    Y{ii} = data(index{ii},2);
    Z{ii} = data(index{ii},3);
end
于 2013-03-06T20:26:36.563 回答