【问题标题】:Matlab: use variable with different index in loopMatlab:在循环中使用具有不同索引的变量
【发布时间】:2016-06-02 15:03:41
【问题描述】:

我有包含电流和电压的大数据文件。我多次测量我的设备,但测量次数各不相同。我首先问用户有多少轮测量,然后我做一个循环从数据中提取电流。我当前的变量是 200x3000 双精度数组。例如,我称它们为 Isd_round1、Isd_round2 等...

for i=1:rounds_number
    [filename,pathname]=uigetfile('*.mat', 'Select matlab data');
    pathname = cd(pathname);
    pathname = strcat(pathname, '\', filename);
    Val=load(pathname);
    assignin('base', ['Isd1_round' num2str(i)], Val.Isd1)

    ...etc...

end

之后,我想绘制和比较电流,但我似乎找不到通过更改索引来调用变量的方法。我想做这样的事情:

figure
hold on
for j=1:rounds_number
    plot(V, Isd_roundj)
end

而且我不知道如何通过更改循环中的索引来调用变量。

我也可以做一个包含所有电流的数组,但由于每个电流已经是一个 (n, m) 双精度数组,我如何创建一个变量“current”来分配“Isd_round1”?

【问题讨论】:

  • 不要这样做。使用元胞数组保存数据,而不是使用 assignin
  • 我在帖子末尾询问了我应该如何做到这一点。由于每个电流已经是一个 200x3000 双精度数组,我应该如何创建一个数组数组?
  • 我刚才说了。一个元胞数组。 Isd1_round{i} = val.Isd1
  • 或者一个元胞数组 :) 我喜欢尽可能使用普通数组(即当所有子数组的大小相同时)。

标签: matlab loops indexing


【解决方案1】:

如前所述,我建议使用元胞数组来存储数据。这是一些示例代码,如何做到这一点:

dataCell = cell(rounds_number,1)
% read data in
for i=1:rounds_number
        [filename,pathname]=uigetfile('*.mat', 'Select matlab data');
        pathname = cd(pathname);
        pathname = strcat(pathname, '\', filename);
        Val=load(pathname);
        dataCell{i} =Val
end

%plot
for i=1:rounds_number
        plot(dataCell{i})
end

%quicker, warning this plots all rounds at once
cellfun(@(x) plot(x),dataCell)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2013-05-27
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多