Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何在循环中引用矩阵_Matlab_Matrix_Reference_Dataset - Fatal编程技术网

Matlab 如何在循环中引用矩阵

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);

我有一系列与地震数据对应的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
所以在我的循环中,我想根据索引从不同的矩阵中提取列。但是我不知道怎么做-我收到错误消息说索引超过了矩阵维度。
谢谢你的帮助

要从单元格数组(即
{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