(MATLAB)在三维矩阵中使用find

您所在的位置:网站首页 matlab找出数组大于零的数 (MATLAB)在三维矩阵中使用find

(MATLAB)在三维矩阵中使用find

2023-12-12 07:06| 来源: 网络整理| 查看: 265

(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