Matlab循环中使用find函数出现矩阵维度不匹配报错求助
问题分析与解决方案
报错原因
你遇到的「Matrix dimensions must agree」错误,本质是向量维度不匹配导致的广播失败:
lat_rho3是181×1,K/L是579×1;lon_rho2是385×1,M/N是579×1- Matlab中进行元素级比较(
>/<)时,要求两个操作数维度完全一致,或其中一个维度为1(支持广播)。但181、385和579均不满足这个条件,因此比较操作无法执行。
从代码逻辑来看,你应该是想针对Clat/Clon的每一组坐标,分别筛选出lat_rho3和lon_rho2中落在对应±0.1区间内的位置,以下是两种符合需求的修正方案:
方案1:遍历每个Clat/Clon坐标,分别筛选
如果需要对**每一组(Clat(i), Clon(i))**单独获取符合条件的索引,用循环遍历每个i即可:
% 用cell数组存储每个坐标对应的结果 D = cell(579, 1); for i = 1:579 % 当前坐标对应的区间 K = Clat(i) - 0.1; L = Clat(i) + 0.1; M = Clon(i) - 0.1; N = Clon(i) + 0.1; % 分别筛选纬度、经度符合条件的索引 lat_idx = find(lat_rho3 > K & lat_rho3 < L); lon_idx = find(lon_rho2 > M & lon_rho2 < N); % 将结果存入cell,也可根据需求调整存储结构 D{i} = struct('lat_indices', lat_idx, 'lon_indices', lon_idx); end
如果lat_rho3和lon_rho2是网格的两个坐标轴(比如要找二维网格中落在区间内的点),可修改为:
D = cell(579, 1); % 生成二维网格矩阵 [lon_grid, lat_grid] = meshgrid(lon_rho2, lat_rho3); for i = 1:579 K = Clat(i) - 0.1; L = Clat(i) + 0.1; M = Clon(i) - 0.1; N = Clon(i) + 0.1; % 找到网格中符合条件的点的线性索引 grid_idx = find(lat_grid > K & lat_grid < L & lon_grid > M & lon_grid < N); D{i} = grid_idx; end
方案2:筛选同时满足所有区间交集的点
如果你的需求是找到lat_rho3中同时落在所有579个纬度区间内的点,以及lon_rho2中同时落在所有经度区间内的点,可通过逐次更新掩码实现:
% 筛选符合所有纬度区间的点 lat_mask = true(size(lat_rho3)); for i = 1:579 K = Clat(i) - 0.1; L = Clat(i) + 0.1; lat_mask = lat_mask & (lat_rho3 > K & lat_rho3 < L); end lat_idx = find(lat_mask); % 同理筛选经度点 lon_mask = true(size(lon_rho2)); for i = 1:579 M = Clon(i) - 0.1; N = Clon(i) + 0.1; lon_mask = lon_mask & (lon_rho2 > M & lon_rho2 < N); end lon_idx = find(lon_mask); % 存储最终结果 D = struct('lat_indices', lat_idx, 'lon_indices', lon_idx);
内容的提问来源于stack exchange,提问作者Juan Diego Lafont Pacheco
相关产品推荐
相关产品推荐

