数组索引必须为正整数或逻辑值。 出错 machine_learning (line 6) filename = fullfile(folder, filenames{i});
时间: 2024-02-27 09:56:57 浏览: 147
这个错误通常是由于 `filenames` 变量中包含了非正整数索引或逻辑值索引导致的。具体来说,它可能是因为 `dir` 函数返回的文件名列表中包含了一些隐藏文件或非 CDF 格式的文件,导致索引无效。
你可以尝试在循环之前使用以下代码来过滤掉非 CDF 格式的文件和隐藏文件:
```
files = dir(fullfile(folder, '*.cdf'));
filenames = {files(~[files.isdir] & ~startsWith({files.name}, '.' & endsWith({files.name}, '.cdf')).name};
```
这将使用 `dir` 函数获取路径下所有扩展名为 `.cdf` 的文件,并使用逻辑索引来排除目录、隐藏文件和非 CDF 格式的文件。然后,使用花括号来将文件名存储在一个字符串数组中。
如果你发现 `filenames` 变量中仍然包含非正整数或逻辑值的索引,那么你可能需要检查 `dir` 函数返回的文件名列表,以确定哪些文件导致了这个问题。你可以使用以下代码来输出 `files` 变量中的文件名和逻辑索引:
```
names = {files.name};
isDir = [files.isdir];
isHidden = startsWith(names, '.') & endsWith(names, '.cdf');
fprintf('Names: %s\n', names{:});
fprintf('isDir: %d\n', isDir);
fprintf('isHidden: %d\n', isHidden);
```
这将输出 `files` 变量中的每个文件名、`isDir` 变量和 `isHidden` 变量。如果你发现 `isDir` 或 `isHidden` 变量包含非逻辑值的索引,那么你可能需要检查文件名列表中的每个文件,以确定哪些文件导致了这个问题。
阅读全文