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

如何在Matlab中快速计算2D、3D、4D及ND坐标的邻域点?

问题

假设存在以下坐标定义:

2D: x, y
3D: x, y, z
4D: x, y, z, k
ND: x, y, z, k, ...

以2D坐标为例,其可能的邻域点包括:x - 1, y、x + 1, y、x, y - 1、x, y + 1、x + 1, y + 1、x - 1, y - 1、x + 1, y - 1、x - 1, y + 1。可见邻域点组合数量较多,请问在Matlab语言中是否有更简便的方法计算这些坐标?

解决方法

当然有,Matlab里可以通过生成偏移量矩阵的方式快速得到任意维度的邻域坐标,无需手动枚举每一个组合:

方法1:利用ndgrid生成全邻域偏移(通用任意维度)

先定义每个维度的偏移范围[-1, 0, 1],再通过ndgrid扩展为多维网格,最后整理成坐标偏移矩阵:

% 设置目标维度(比如2D就设为2,3D设为3)
dim = 2;
% 为每个维度生成[-1,0,1]的偏移选项
offsets = repmat({-1:1}, 1, dim);
% 生成多维偏移网格并转为列向量格式
[grid_offsets{1:dim}] = ndgrid(offsets{:});
offset_matrix = cell2mat(cellfun(@(x) x(:), grid_offsets, 'UniformOutput', false));
% 剔除中心自身(偏移全为0的点)
offset_matrix = offset_matrix(all(offset_matrix ~= 0, 2), :);

运行后offset_matrix就是对应维度下所有邻域的偏移量。给任意中心坐标[x0, y0],直接相加就能得到所有邻域点:

center = [x0, y0];
neighbors = center + offset_matrix;

这种方法完全支持N维场景,比如3D时只需把dim改成3,就能自动生成26个邻域点的偏移量。

方法2:利用permutations(适合低维度场景)

如果仅处理2D/3D这类低维度场景,也可以用permutations配合去重生成偏移,但通用性不如第一种:

% 生成2D邻域偏移
offsets = unique(permutations([-1,0,1,-1,0,1]), 'rows');
offsets = offsets(all(offsets ~= 0, 2), :);

内容的提问来源于stack exchange,提问作者euraad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:28:16