如何在循环中引用矩阵

时间:2017-10-18 23:12:09

标签: matlab matrix reference dataset

我有一系列与地震数据相对应的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

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

3 个答案:

答案 0 :(得分:1)

如上所述,对单元格数组使用{}括号。此外,如果您想将纬度和经度存储到新矩阵中,请添加' j'定义到您的矩阵,这样您就不会覆盖for循环中的数据。

同样在编写循环时,如果分析的文件数量发生变化,最好使用大小/长度/数字而不是固定变量。

所以拿你的代码;

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

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

答案 1 :(得分:0)

要从单元格数组中获取所需的矩阵(matrix=cell2mat(matrixname(j)); 是),您需要使用cell2mat()

{{1}}

答案 2 :(得分:0)

由于data1和data2是矩阵,所以:

matrixname = {data1 data2};

你没有像你期望的那样获得一系列双打,而是一个单元阵列。这很好,因为data1和data2没有相同的大小(行数或列数)。

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

matrix = matrixname {j};

查看与代码的区别:我使用大括号{}而不是括号()。这样做,矩阵是一个双打数组。做matrix = matrixname(j),matrix是一个单元格数组。

最后,清除循环中的临时变量总是很好的。然后,您的代码应该是:

负载(' DATA1&#39);

负载(' DATA2&#39); %data1和data2是大型矩阵

matrixname = {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]; data2 = [10 10; 20 20; 30 30; 40 40];

matrixname = {data1 data2};

matrixname {1}为您提供数据1,矩阵名{2}为您提供数据2。