Matlab - 提取与另一个数组中某些值关联的数据数组中的值

时间:2015-09-30 20:28:00

标签: matlab indexing

我有许多大量的温度和压力数据,每个都包含在细胞中。我想在压力值接近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的值,并拉出相应的温度值。任何帮助是极大的赞赏。谢谢!

1 个答案:

答案 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