我是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 回答
首先,do not use eval. Anoter要避免的是像
A1 A2 A3
这样的变量名,这样的mat文件应该永远不会在第一个地方创建,而应该包含一个保存数据的单元格数组A
.我没有得到你的完整问题,但我会为你提供一些希望能帮助你的代码 . 如果您不知道单元格数组和动态字段名称,请阅读相应的文档以了解代码 .
首先,我建议使用带有输出参数的
load
. 这会导致包含mat中所有数据的结构而不是单个变量:现在你可以迭代它:
对于mat中的每个变量,此代码采用forst列并将其存储在单元格数组B中 .
丹尼尔的答案涵盖了一些重要信息在此答案之前应该考虑......
这是从磁盘访问数据的另一种方法
使用
matfile
函数创建matfile对象,然后使用此对象使用动态字段名称为什么我在这里发布
我相信
fieldnames
会以错误的顺序给出你的案件名称......(Mw10将出现在Mw2之前)Matfile
允许您只加载所需变量的必需部分