(MATLAB)在三维矩阵中使用find
by HPC_ZY
三维或更高维矩阵中使用find函数
find()
find()
函数可以找到矩阵中满足条件的数据的索引,但它的输出最多只支持二维情况
- 一维情况
% 一维矩阵
A = [1,2,3,4];
% 一维返回
idx = find(A>2);
- 二维情况
% 二维矩阵
B = [1,3;2,4];
% 一维返回
idx = find(A>2);
% 二维返回
[x,y] = find(A>2);
因为内存本身不存在什么一维二维,只是我们通过索引构造了高维矩阵。
所以对于二维或更高维的矩阵,依旧可以使用单个返回值。
上例中idx和(x,y)只是存在一个简单的转换关系(注意MATLAB是列优先)
x = c e i l ( i d x / 2 ) , y = i d x − ( x − 1 ) ∗ 2 x = ceil(idx/2), y=idx-(x-1)*2 x=ceil(idx/2),y=idx−(x−1)∗2
高维矩阵中的find
- 三维情况
有了上述理论,任意维的我们都能通过索引转换关系得到,例如三维
%% 找到满足条件的值,类似MATLAB自带的find,但这里是三维的
function [x,y,z] = find3d(mat)
[M,N,~] = size(mat);
% 一维索引
idx = find(mat);
% 索引三维转换
z = ceil(idx/M/N);
idx = idx-(z-1)*M*N;
y = ceil(idx/M);
x = idx-(y-1)*M;
end
上述代码只是为了展示原理,其实MATLAB有自带的索引转换函数ind2sub()
。
mat = rand(3,3,3);
% 一维索引
idx = find(mat>0.5);
% 索引转换
[x,y,z] = ind2sub(size(mat), idx);
更高维的矩阵也可以做了
其他
- 有更多问题,欢迎评论区留言