我有一系列与地震数据相对应的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
因此,在我的循环中,我想根据索引从不同的矩阵中提取列。但我无法弄清楚如何做到这一点 - 我收到错误消息,指出索引超出矩阵维度。 感谢帮助!
答案 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。