You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:39:57