Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.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_Loops_Matrix - Fatal编程技术网

Matlab 将循环矩阵复制到一个三维矩阵中

Matlab 将循环矩阵复制到一个三维矩阵中,matlab,loops,matrix,Matlab,Loops,Matrix,我有一个要加载的文本文件列表,然后提取所有重叠的行。第一列包含年,每个数据集跨越不同的年块,但它们都在中间重叠。最后,我想要一个三维矩阵,在一个矩阵中有重叠的年份。我的代码总是停留在我注释掉的那行。我知道它不正确,但谁能告诉我为什么它不正确 clear all name_list = {'Beijing';'GT';'soi';'naoi';'Sydney_Airport';'Los Angeles';'Paris';'Presque Isle'}; [m,n] = size(name_lis

我有一个要加载的文本文件列表,然后提取所有重叠的行。第一列包含年,每个数据集跨越不同的年块,但它们都在中间重叠。最后,我想要一个三维矩阵,在一个矩阵中有重叠的年份。我的代码总是停留在我注释掉的那行。我知道它不正确,但谁能告诉我为什么它不正确

clear all
name_list =  {'Beijing';'GT';'soi';'naoi';'Sydney_Airport';'Los Angeles';'Paris';'Presque Isle'};
[m,n] = size(name_list);

files = dir('*.txt');
[m,n] = size(files);

for i=1:m
    eval(['load ' files(i).name ' -ascii']);
    vals{i} = load(files(i).name);
    matrix = vals{i};
    station = (files(i).name(1:end-4));
    startyear(i) = min(matrix(:,1));
    endyear(i) = max(matrix(:,1));
    allstart = max(startyear);
    allend = min(endyear);
    %matrixnew(i) = matrix(allstart:allend,2:13,i); 
end
这里有两个问题:

  • 您的注释行
    %matrixnew(i)=矩阵(allstart:allend,2:13,i)
    假设
    matrix
    是一个三维数组,但在其他地方,您将其视为二维数组(我相信
    load
    总是返回一个二维数组)。这可能就是为什么会出现“索引超过矩阵维度”错误。例如:

    >> foo = rand(10,10);
    >> foo(2:10,3:4,2)
    Index exceeds matrix dimensions. 
    
    也许你想要
    矩阵(allstart:allend,2:13)
    ?但这是行不通的,因为
    allstart
    包含一年,这可能不是数组的有效索引(更可能是错误的原因)。使用包含最小值的索引将更接近正确,但我认为它仍然不起作用

  • matrixnew
    指数组中的单个元素。不能将数组分配给数组的元素。grantnz是对的,制作
    matrixnew
    一个单元格数组可以修复这个错误,我想最终你可以将单元格数组变成三维数组


  • 我认为你走在正确的轨道上,但是你缺少了一些使这项工作成功的东西。有一件事要考虑的是,你看起来是在一次完成所有的事情。我不明白这怎么行。在决定保存的年份范围之前,您需要对所有文件进行实存。因此,请多次执行此操作:首先将所有文件中的所有数据加载到单元格数组中,然后计算年份范围,然后从每个文件中提取该年份范围内的数据。

    此外,当我在没有“%”的情况下运行此操作时,我会收到“索引超出矩阵维度”错误消息。我想知道为什么。你希望矩阵变量有3维吗?在注释语句之前添加大小(矩阵),以查看其维度。此外,您可能还需要为单元数组赋值(即,用matrixnew{i}替换matrixnew(i))。