鱼C论坛

 找回密码
 立即注册
查看: 2494|回复: 2

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

[复制链接]
发表于 2023-4-1 13:17:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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



麻烦大佬们看一下谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表