matlab查找元素在矩阵中的位置

find

A为矩阵或向量, n为待查的某个数或向量.  A n不能同为向量
[x,y] = find(A == n)  %  x,y分别为n所在的行和列
index = find(A == n)   % index为返回的按列存储位置 [H,W] = size(A)  index = (y - 1) * H + x
% n为行/列向量时,要求其长度等于A的行/列长度.  除了==, 还支持> <等比较 

%% demo
A = reshape(1:6,2,3)
%% 1
n = 3;
index = find(A == n)
[x,y] = find(A == n)
index = find(A == 8)
%% 2
n = [1 2 3]; % [1 2 5] 测试此二例
[x,y] = find(A == n);
n = [1 2];
[x,y] = find(A == n); % error, 长度不等
n = [1;2];
[x,y] = find(A == n);

%% 3
[x,y] = find(A(1,:),n); % error, 不能同为向量  A为向量时,n需为标量

ismember

A为任意维度的矩阵, B为待查的元素,可以任意维度的矩阵.  ismember(B,A)
[~,id] = ismember(3,3)  % A B 同为标量  ~为逻辑值,1 或 0
[~,id] = ismember(1:6,3)  % 对比下个指令
[~,id] = ismember(3,1:6)  
% ismember最常见应用在于判断某向量或矩阵B是否为矩阵A的子集
A = reshape(1:18,6,3);
B = reshape(1:6,2,3);
[~,id] = ismember(B,A,'rows');  % 对比下个指令
[~,id] = ismember(B,A)  % 当指定参数'rows'时,将行向量看作整体进行判断,且要求A B的列数相等. 未指定参数'rows'时,则逐个元素判断.

问题在于如果B是A的真子集时,如何方便高效判断B是否为A的一部分, 笔者给出如下方案. 如果B为A的重复子部分,需对结果进行保存.欢迎大家批评指正:

A = reshape(1:30,6,5);
B = A(2:4,2:4);
[HA,WA] = size(A);
[HB,WB] = size(B);
temp = B(1,:);
cols = [];
for i = 1:WA - WB + 1
    if (ismember(temp,A(:,i:i+WB-1),'rows'))
        [~,rows] = ismember(B,A(:,i:i+WB-1),'rows');
        cols = i:i+WB-1;
        break  %  或者对结果进行保存, 再接着扫描
    else
        continue
    end
end
rows
cols

在这里插入图片描述

  • 8
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值