(MATLAB)在三维矩阵中使用find |
您所在的位置:网站首页 › matlab找出数组大于零的数 › (MATLAB)在三维矩阵中使用find |
(MATLAB)在三维矩阵中使用find
find()高维矩阵中的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);更高维的矩阵也可以做了 其他 有更多问题,欢迎评论区留言 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |