fawnlove 发表于 2023-4-1 13:17:09

为什么最后只输出一个值,这个循环处理数据有问题嘛?

folder = 'C:\Users\25824\降雨数据(mat)\';
files = dir(fullfile(folder, '*.mat'));
for i = 1:733
    filename = fullfile(folder, files(i).name);
    data = load(filename);
    a = data.rain(:,4)
    b = a(find(a>=1))
    thresold = prctile(b,95)
end



麻烦大佬们看一下谢谢

isdkz 发表于 2023-4-1 13:24:14

代码只输出一个值的原因是,在for循环中的变量threshold每次被重新赋值,之前的值被覆盖了。

因此,循环结束时,只输出了最后一次迭代中的threshold值。

如果想要存储每次迭代中的threshold值,可以创建一个数组或单元数组来存储它们。例如:

folder = 'C:\Users\25824\降雨数据(mat)\';
files = dir(fullfile(folder, '*.mat'));
thresholds = []; % 创建一个空数组来存储threshold
for i = 1:733
    filename = fullfile(folder, files(i).name);
    data = load(filename);
    a = data.rain(:,4);
    b = a(find(a>=1));
    threshold = prctile(b,95);
    thresholds(end+1) = threshold; % 将threshold附加到数组末尾
end
disp(thresholds) % 输出所有threshold值

这将输出一个包含所有迭代中的threshold值的数组thresholds。

歌者文明清理员 发表于 2023-4-2 18:06:15

这段代码看起来像是在一个文件夹中遍历所有.mat文件,加载数据并计算阈值。但是有一些问题需要注意:

Windows中的路径分隔符应该使用反斜杠(\),但是反斜杠也用于转义字符,因此需要将路径字符串中的反斜杠重复两次或者改用正斜杠(/)。例如:folder = 'C:/Users/25824/降雨数据(mat)/';

find(a>=1) 返回了满足条件的元素在向量中的索引,而不是这些元素本身,因此需要将其修改为 a(a>=1);

在每个循环迭代中,变量 thresold 被重新赋值,但没有保存其值,因此在循环结束后只能得到最后一次的阈值。

以下是修改后的代码:folder = 'C:/Users/25824/降雨数据(mat)/';
files = dir(fullfile(folder, '*.mat'));
thresholds = zeros(1, 733);
for i = 1:733
    filename = fullfile(folder, files(i).name);
    data = load(filename);
    a = data.rain(:,4);
    b = a(a>=1);
    thresholds(i) = prctile(b,95);
end

这段代码将每个阈值存储在一个长度为733的数组 thresholds 中。
页: [1]
查看完整版本: 为什么最后只输出一个值,这个循环处理数据有问题嘛?