我有许多大量的温度和压力数据,每个都包含在细胞中。我想在压力值接近850时找到每个相应压力指数的温度值。压力存储在[距离x高度]中,得到的温度阵列需要[1 x距离] - 如,温度只需要从每个压力柱中拉出一个数字。
我已经尝试找到每个压力数组的索引,其值在840到860之间:
for k = 1:length(hdfFiles)
airTemp850{k} = airTemp{k}(pressure{k} > 840. & pressure{k} < 860.);
end
但有时这些数字之间没有压力值。如果我扩大了范围,它有时会覆盖多个压力柱,最终温度数组中的值太多。
我也尝试将最接近的压力值设置为850,但这只能找到最接近850的整个压力数组中的一个值。
for k = 1:length(hdfFiles)
val = 850;
diffVal{k} = abs(minus(pressure{k}(:),val));
[idx idx] = min(diffVal{k}) % index of closest value to 850
closest{k} = pressure{k}(idx{k});
end
我想要的是让matlab读取每一行压力,找到最接近850的值,并拉出相应的温度值。任何帮助是极大的赞赏。谢谢!
答案 0 :(得分:0)
我认为min
是要走的路。当调用矩阵时,它将按照所需的维度运行。您的错误来自使用向量化矩阵的(:)
。另外,您应该使用sub2ind
将矩阵索引转换为线性索引。试试这个:
val = 850;
for k = 1:length(hdfFiles)
diffVal = abs(pressure{k} - val); % no {k} if no storage need, no (:) and - seems a bit clearer than minus to me
[~, idx] = min(diffVal, [], 2); % index of closest value to 850 along height dimension, ~ for unwanted output
linind = sub2ind(size(pressure{k}), 1:size(pressure{k}, 1), idx);
closest{k} = pressure{k}(linind);
end