首页 文章

使用for循环从包含多个矩阵的.mat文件v7.3加载矩阵的特定列

提问于
浏览
1

我是Matlab的新手,如果你能帮助我解决以下问题,我将不胜感激 .

我有一个.mat文件v7.3,它有26个矩阵,数量越来越多,即Mw1,Mw2,Mw3 ...... Mw26

我想分别从每个矩阵加载第一列来进行一些计算,然后使用for循环转到下一个 .

我知道有选择使用matfile然后加载我想要的列,即:

firstColB = example.B(:,1); (matlab documentation)

但我不知道如何在循环中做到这一点......

例如:

首先,我有一个.mat文件,其中包含26个5000x4的矩阵 .

然后我只想加载matrixn的第一列(n = 26)

然后执行以下操作

ao=0;
a=[2,4,6,8,10,12,14,16,18,20]; %segments of the tube in cm

for j=1:10;

temp11=find(firstColumn>ao & firstColumn<=a(j)); %firstColumn of the *n*matrix

temp1=firstColumn(temp11,:);

eval(sprintf('A%d = temp1', j));

ao=a(j);

end

My problem:

该循环将生成10个新的矩阵A1,A2,A3 ...... A10,而不指示对应于第一矩阵(即,Mw1) . 它应该像A11,A12,A13 ...... A110 .

...当我完成这个循环时,我想自动转到下一个矩阵,并重复相同但是A矩阵应该像A21,A22,A23 ...... A210,因为这些新矩阵对应于第二个矩阵等等

我希望它能够实现我的目标!

2 回答

  • 1

    首先,do not use eval. Anoter要避免的是像 A1 A2 A3 这样的变量名,这样的mat文件应该永远不会在第一个地方创建,而应该包含一个保存数据的单元格数组 A .

    我没有得到你的完整问题,但我会为你提供一些希望能帮助你的代码 . 如果您不知道单元格数组和动态字段名称,请阅读相应的文档以了解代码 .

    首先,我建议使用带有输出参数的 load . 这会导致包含mat中所有数据的结构而不是单个变量:

    data=load('test.mat')
    

    现在你可以迭代它:

    fn=fieldnames(data)
    B=cell(1,numel(fn))
    for ix=1:numel(fn)
         B{1}=data.(fn{ix})(:,1)
    end
    

    对于mat中的每个变量,此代码采用forst列并将其存储在单元格数组B中 .

  • 1

    丹尼尔的答案涵盖了一些重要信息在此答案之前应该考虑......

    这是从磁盘访问数据的另一种方法

    使用 matfile 函数创建matfile对象,然后使用此对象使用动态字段名称

    myFile = matfile('myFileName.mat')
    for jj = 1:26
    
        B{jj} = myFile.( sprintf('Mw%i',jj) )(:,1)
    
    end
    

    为什么我在这里发布

    • 我相信 fieldnames 会以错误的顺序给出你的案件名称......(Mw10将出现在Mw2之前)

    • Matfile 允许您只加载所需变量的必需部分

相关问题