Matlab 如何在循环中引用矩阵
我有一系列与地震数据对应的11个大矩阵。我想从循环中的各个矩阵中提取数据。我将使用虚拟矩阵data1和data2来说明我的问题Matlab 如何在循环中引用矩阵,matlab,matrix,reference,dataset,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);
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
所以在我的循环中,我想根据索引从不同的矩阵中提取列。但是我不知道怎么做-我收到错误消息说索引超过了矩阵维度。
谢谢你的帮助 要从单元格数组(即
{data1 data2}
中获得所需的矩阵,需要使用:
如前所述,对单元格数组使用{}括号。此外,如果您想将纬度和经度存储到新矩阵中,则将“j”项添加到矩阵中,这样您就不会覆盖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
请记住,[]括号用于矩阵。如上所述,使用错误的括号是导致错误的原因。由于数据1和数据2是矩阵,因此在执行以下操作时: matrixname={data1 data2} 您不会得到预期的双精度数组,而是一个单元格数组。这很好,因为data1和data2的大小(行数或列数)不同 然后,在for循环中,当从matrixname访问一个原始矩阵(data1或data2)时,应该将其转换回一个双精度数组。最简单、最快捷的方法是: 矩阵=矩阵名称{j} 看看与代码的区别:我使用的是花括号{},而不是圆括号()。这样一来,矩阵就是一个双精度数组。Doing matrix=matrixname(j),矩阵是一个单元数组 最后,清除循环中的临时变量总是好的。然后,您的代码应该是: 加载(“数据1”) 加载('data2');%data1和data2是大型矩阵 matrixname={data1 data2} 对于j=1:2
matrix=matrixname{j};
latitude=matrix(:,1);
longitude=matrix(:,2);
geoshow(latitude,longitude);
clear matrix latitude longitude
结束
例如,如果:
数据1=[11;22;33];
数据2=[10;20;30;40]
matrixname={data1 data2}
matrixname{1}准确地为您提供数据1,matrixname{2}为您提供数据2。或者他可以使用
{}
对其进行索引。绝对没有必要使用cell2mat
。你需要{}
,而不是()
。由于matrixname
是一个单元格数组,matrixname=matrixname(j)
将返回1个单元格,而不是您的数组,因此matrixname(:,2)
将超出范围`
matrix=matrixname{j};
latitude=matrix(:,1);
longitude=matrix(:,2);
geoshow(latitude,longitude);
clear matrix latitude longitude