matlab - 在 MATLAB 中进行最近邻搜索
问题描述
我目前正在使用一个大的 if 语句(恰好在一个 while 循环内)在模型网格中搜索我的层:
if dzf < flheightcm(i,j,1);
z_lay = 1;
elseif dzf > flheightcm(i,j,1) & dzf<flheightcm(i,j,2);
z_lay = 2;
elseif dzf > flheightcm(i,j,2) & dzf<flheightcm(i,j,3);
z_lay = 3;
elseif dzf > flheightcm(i,j,3) & dzf<flheightcm(i,j,4);
z_lay = 4;
elseif dzf > flheightcm(i,j,4) & dzf<flheightcm(i,j,5);
z_lay = 5;
elseif dzf > flheightcm(i,j,5) & dzf<flheightcm(i,j,6);
z_lay = 6;
elseif dzf > flheightcm(i,j,6) & dzf<flheightcm(i,j,7);
z_lay = 7;
elseif dzf > flheightcm(i,j,7) & dzf<flheightcm(i,j,8);
z_lay = 8;
elseif dzf > flheightcm(i,j,8) & dzf<flheightcm(i,j,9);
z_lay = 9;
elseif dzf > flheightcm(i,j,9) & dzf<flheightcm(i,j,10);
z_lay = 10;
elseif dzf > flheightcm(i,j,10) & dzf<flheightcm(i,j,11);
z_lay = 11;
elseif dzf > flheightcm(i,j,11) & dzf<flheightcm(i,j,12);
z_lay = 12;
elseif dzf > flheightcm(i,j,12) & dzf<flheightcm(i,j,13);
z_lay = 13;
elseif dzf > flheightcm(i,j,13) & dzf<flheightcm(i,j,14);
z_lay = 14;
elseif dzf > flheightcm(i,j,14) & dzf<flheightcm(i,j,15);
z_lay = 15;
elseif dzf > flheightcm(i,j,15) & dzf<flheightcm(i,j,16);
z_lay = 16;
elseif dzf > flheightcm(i,j,16) & dzf<flheightcm(i,j,17);
z_lay = 17;
elseif dzf > flheightcm(i,j,17) & dzf<flheightcm(i,j,18);
z_lay = 18;
elseif dzf > flheightcm(i,j,18) & dzf<flheightcm(i,j,19);
z_lay = 19;
elseif dzf > flheightcm(i,j,19) & dzf<flheightcm(i,j,20);
z_lay = 20;
elseif dzf > flheightcm(i,j,20) & dzf<flheightcm(i,j,21); % probably not accounting for here on.
z_lay = 21;
elseif dzf > flheightcm(i,j,21) & dzf<flheightcm(i,j,22);
z_lay = 22;
elseif dzf > flheightcm(i,j,22) & dzf<flheightcm(i,j,23);
z_lay = 23;
elseif dzf > flheightcm(i,j,23) & dzf<flheightcm(i,j,24);
z_lay = 24;
elseif dzf > flheightcm(i,j,24) & dzf<flheightcm(i,j,25);
z_lay = 25;
elseif dzf > flheightcm(i,j,25) & dzf<flheightcm(i,j,26);
z_lay = 26;
elseif dzf > flheightcm(i,j,26) & dzf<flheightcm(i,j,27);
z_lay = 27;
end
no2_cumsum = no2_cumsum(1) + no2_moleccm3(i, j, z_lay, 12);
虽然这种方法有效,但它相当慢,我想尝试一种更快的方法。以下是我正在用以下代码替换 if 语句的代码:
Gz = flheight(i,j,:); % Height data
Psz = dzf; % Distance traveled from the prior point
dze = sqrt( sum( (Gz - Psz).^2, 2)); % Distance Formula
[minDist, idxMinDist] = min(dze); % Finds the minimum value of distance traveled
closest_z = Gz(idxMinDist); % Yields closest latitude ot the value given
z_o = dzf_o;
z = closest_z;
z_lay = find(flheight(i,j,:) == (z - z_o));
no2_cumsum = no2_cumsum(1) + no2_moleccm3(i, j, z_lay, 12);
我的问题是我的“飞行高度”数据只有维度:
flheight(1:336,1:264,1:27,1:25)
但我不断收到错误
>> Date_two
Index exceeds matrix dimensions.
Error in Date_two (line 208)
no2_cumsum = no2_cumsum(1) + no2_moleccm3(i, j, z_lay, 12);
我很确定问题是我的代码继续迭代超过 flheight(i,j,27,t) 的高度,直到第三维高度等于 28,如下所示:
flheight(i,j,28,t)
这意味着 z_lay 变为等于 28,即使它在一个 while 循环中指出:
while dzf < flheight(i, j, 27)
end
无论如何,我不确定为什么我的“z_lay”变量继续迭代到 28,超出了它应该到达循环末尾的时间。
解决方案
推荐阅读
- react-native - 如何解决这些错误?_this2.state 不是函数 & _this3.state 不是函数?
- python - 使用 Python Black(19.2b 之前),如何跳过数字文字中的规范化下划线?
- javascript - 如何编写以任意顺序匹配两个或多个字符的正则表达式?
- awk - 计算输入文件每行的字段分隔符,如果缺失/超出,则将文件名输出到错误文件
- ethereum - openzeppelin 中关于 MinterRole 合约的问题
- python - fipy内部边界条件的大值
- c++ - C++ 11 std::vector push_back 方法多次调用 copy/dest?
- c# - .net core azure WebJob 3.0.3 UseTimers 丢失
- javascript - 限制用户以 00.000 格式输入数字
- python - 如何使用 sci-kit learn 用逻辑回归预测单个实例?