matlab中如果存某一列在1#,2#,3#…这样若干个变量,如何判断到底有多少个变量并排除重复的变量后形成一列变量列表,然后根据列表中的变量名将原cell分为不同的cell
时间: 2024-09-28 11:17:34 浏览: 40
在MATLAB中,如果你有一系列以数字命名的变量,比如`var1`, `var2`, `var3`...,并且你想确定所有不同的变量,并将它们放入一个列表,可以按照以下步骤操作:
1. **获取所有变量**:
使用`dir`函数列出当前工作目录下的所有变量,注意过滤掉系统自带的隐藏文件和非变量。
```matlab
vars = dir('var*');
```
2. **去除重复并筛选变量**:
从`dir`的结果中选择只有变量名的部分,去除非变量文件(如`.m`、`.html`等),并将结果转换为字符向量。
```matlab
uniqueVars = {vars.name(~[vars.isdir | startsWith(vars.name, '.')])};
```
这里,`~[vars.isdir | startsWith(vars.name, '.')]`是一个布尔数组,用于过滤出不是目录的非变量文件。
3. **形成变量列表**:
将筛选后的变量名转换为字符串形式的列表。
```matlab
varList = uniqueChars(uniqueVars);
```
4. **根据变量列表分割cell**:
如果原始数据是cell数组,并且每个cell的内容对应一个变量,你可以遍历`varList`,根据变量名取出对应的cell内容。
```matlab
cellData = cellfun(@(x) eval(x), varList, 'UniformOutput', false); % 注意eval在这里用于动态查找变量
```
但是,`eval`函数有潜在的安全风险,因为它会执行输入的字符串。在实际应用中,推荐使用`struct2cell`或者更安全的方式来处理这种情况,例如如果变量是结构体的形式存储。
```matlab
% 假设你的cell数据是以struct存储,那么可以这样做
cellData = struct2cell(cellData);
```
阅读全文