【问题标题】:How can I reference a matrix in a loop如何在循环中引用矩阵
【发布时间】:2017-10-20 01:47:06
【问题描述】:

我有一系列对应于地震数据的 11 个大矩阵。我想在循环中从单个矩阵中提取数据。我将使用虚拟矩阵 data1 和 data2 来说明我的问题。

load('data1');

load('data2'); %data1 and data2 are large matrices

matrixname={data1 data2};

for j=1:2

    matrix=matrixname(j);

    latitude=matrix(:,1);

    longitude=matrix(:,2);

    geoshow(latitude,longitude);

end

所以在我的循环中,我想根据索引从不同的矩阵中提取列。但我无法弄清楚如何做到这一点 - 我收到错误消息,指出索引超出了矩阵维度。 感谢您的帮助!

【问题讨论】:

  • access data in cell arrays{},而不是 ()。因为matrixname 是一个单元格数组,matrix=matrixname(j) 将返回 1 个单元格,而不是您的数组,所以 matrix(:,2) 将超出范围`

标签: matlab matrix reference dataset


【解决方案1】:

如前所述,对元胞数组使用 {} 括号。此外,如果要将纬度和经度存储到新矩阵中,请将“j”项添加到矩阵中,这样就不会覆盖 for 循环中的数据。

另外,在编写 for 循环时,最好使用 size/length/numel 而不是固定变量,以防您分析的文件数量发生变化。

所以拿走你的代码;

for j=1:size(matrixname,2)

    matrix = []; % reformat matrix in case of size differences

    matrix = matrixname{j}; % gets the jth matrix

    latitude(j) = matrix(:,1); % outputs column 1

    longitude(j) = matrix(:,2); % outputs column 2

    geoshow(latitude(j),longitude(j)); % runs function on jth set of data

end

请记住,[] 括号用于矩阵。如上所述,使用错误的括号会给您带来错误。

【讨论】:

    【解决方案2】:

    要从元胞数组({data1 data2} 是什么)中获取您需要的矩阵,您需要使用cell2mat()

    matrix=cell2mat(matrixname(j));
    

    【讨论】:

    • 或者他可以用{} 索引它。绝对不需要cell2mat
    【解决方案3】:

    由于 data1 和 data2 是矩阵,当你这样做时:

    矩阵名={data1 data2};

    您没有得到预期的双精度数组,而是一个元胞数组。这很好,因为 data1 和 data2 的大小(行数或列数)不同。

    然后,在 for 循环中,当从 matrixname 访问原始矩阵之一(data1 或 data2)时,您应该将其转换回双精度数组。最简单、最快的方法是:

    矩阵 = 矩阵名{j};

    看看你的代码的不同之处:我使用大括号 {} 而不是括号 ()。这样做,矩阵是一个双精度数组。做matrix=matrixname(j),matrix就是一个元胞数组。

    最后,清除循环内的临时变量总是好的。然后,你的代码应该是这样的:

    加载('data1');

    加载('data2'); %data1 和 data2 是大矩阵

    矩阵名 = {data1 data2};

    对于 j=1:2

    matrix=matrixname{j};
    
    latitude=matrix(:,1);
    
    longitude=matrix(:,2);
    
    geoshow(latitude,longitude);
    
    clear matrix latitude longitude
    

    结束

    例如,如果:

    data1 = [1 1; 2 2; 3 3]; 数据2 = [10 10; 20 20; 30 30; 40 40];

    矩阵名 = {data1 data2};

    matrixname{1} 准确地为您提供 data1,matrixname{2} 为您提供 data2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 2021-08-02
      • 2013-05-29
      相关资源
      最近更新 更多