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

如何在Matlab的3D矩阵中实现类似2D矩阵find的取值功能

解决3D矩阵下提取坐标与对应值的问题

嘿,刚好碰到过类似的需求,我来给你捋清楚怎么操作!

你在2D场景里用[yy, xx, vals] = find(x)能直接拿到行、列和对应值,但到3D矩阵时,find的输出规则变了——如果用三个输出参数,返回的是三维坐标(yy, xx, zz),而不是值,这就是你卡壳的地方。不过有两种简单的方法能满足你的需求:

方法一:一步拿值+转坐标(推荐)

先通过find的双输出模式拿到线性索引和对应的值,再用ind2sub转换坐标时忽略不需要的zz:

% 先构造你的3D矩阵
x = [1, 0, 3; 2, 3, 0; 0, 0, 3];
x = repmat(x, [1, 1, 3]); 
x(:, :, 2) = fliplr(x(:, :, 1));

% 核心操作:先取索引和值,再转坐标
[idx, vals] = find(x);
[yy, xx, ~] = ind2sub(size(x), idx);

这里的~是MATLAB里用来忽略不需要的输出参数的语法,刚好符合你不关注zz的需求。

方法二:先拿坐标再取值

如果已经通过ind2sub得到了yy, xx, zz,也可以用sub2ind把坐标转回线性索引,再提取值:

[yy, xx, zz] = ind2sub(size(x), find(x));
vals = x(sub2ind(size(x), yy, xx, zz));

这种方法稍绕一点,但适合你已经有坐标数据的场景。

最后再提个小知识点:find的输出规则要记清楚哦:

  • 单输出:返回所有非零元素的线性索引
  • 双输出:返回线性索引 + 对应非零元素的值
  • 三输出:返回三维坐标(yy, xx, zz),没有值的输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:07:03