为什么最后只输出一个值,这个循环处理数据有问题嘛?
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
麻烦大佬们看一下谢谢
代码只输出一个值的原因是,在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。 这段代码看起来像是在一个文件夹中遍历所有.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]