Matlab关于find()函数的心得,查找三维数组

 

find函数语法如下,我们着重讨论下返回值的问题,并对二维以上数组进行查找

1.k = find(X)
2.k = find(X,n)
3.k = find(X,n,direction)
4.[row,col] = find(___)
5.[row,col,v] = find(___)

 

 

一、前三个语法返回的是一个线性索引k,如果x是多维数组,则按照第一维,第二维,第三维的顺序遍历(三维以上以此类推)。 例如2x2x2的三维数组,第一维我们称之为行,第二维为列,第三维为页。则第一行第一列第一页为1,第一行第二列第一页为3,第一行第一列第二页为5。

 

例子:X为m*n*z=2*4*2的数组(假设a为非零元素)

 

val(:,:,1) =

     1     0     0     1
     1     1     0     1

val(:,:,2) =
     0     2     0     2
     0     2     2     2

 

 

 

 

k=find(a)=[1     2     4     7     8    11    12    14    15    16]

fix((k-1)/(m*n))+1则得到页索引

fix(rem(k-1),(m*n))/m)+1便得到列索引

rem(rem((k-1),m*n),m)+1便得到行索引

 

 

 

二、第4个语法返回的是行和列索引,对于三维数组,row始终是实际对应的行,col则是从第一页开始顺序遍历,例如2x2x2数组,第一行第一列第一页为[1 1],第一行第一列第二页为[1 3]。三维以上则按照第三维第四维的顺序依次遍历。

例2:

例子:X为m*n*z=2*4*2的数组,元素值:

val(:,:,1) =

     1     0     0     1
     1     1     0     1

val(:,:,2) =
     0     2     0     2
     0     2     2     2

 

 

 

[row col]=find(a)

row=[ 1     2     2     1     2     1     2     2     1     2]

col=[ 1     1     2     4     4     6     6     7     8     8]

fix((col-1)/n)+1便为页索引

rem((col-1),n)+1便为列索引

三、第5个语法在前面的基础多了个v,返回对应的索引的数值

 

---------------------------------------------------------------------------------------------------------------------------------

ps:最近在做图像处理方面涉及到多维数组,对最近的使用做个总结。matlab的这个处理机制可能由于多维数组在内存里的存储机制有关,所以遍历的时候都是按照第一维第二维....的顺序依次进行。

  • 13
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blanklog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值