matlab满足条件元素位置,【转载】[Matlab]在矩阵中寻找满足条件的元素

这篇博客介绍了MATLAB中如何使用逻辑数组和find函数来定位矩阵中满足特定条件的元素。通过示例展示了如何集体赋值以及以单下标和双下标形式返回这些元素的位置。此外,还提到了arrayfun函数的综合应用,给出了查找矩阵中相同向量位置的不同方法,包括使用ismember、bsxfun和arrayfun等函数的组合。这些技巧对于高效地处理矩阵数据十分有用。
摘要由CSDN通过智能技术生成

from:http://ncforest.blog.163.com

参见张志涌精通matlab

>> A=randn(3,4)

A =

-0.5883    0.1139   -0.0956   -1.3362

2.1832    1.0668   -0.8323    0.7143

-0.1364    0.0593    0.2944    1.6236

以逻辑数组表达满足条件的元素:

>>L=(A>0)

L =

0     1     0     0

1     1     0     1

0     1     1     1

%寻找符合条件元素位置(返回为一列,并以单下标形式表示位置,故转置为一行)

>>s=(find(L))"或者

>> s=(find(A>0))"

s =

2     4     5     6     9    11    12

可以对满足条件的元素集体赋值

>> A(s)=0

A =

-0.5883         0   -0.0956   -1.3362

0         0   -0.8323         0

-0.1364         0         0         0

如果要以双下标形式返回符合条件的元素位置:

>> [ii,jj]=find(A==0);

>> disp(ii"),disp(jj")

2     1     2     3     3     2     3

1     2     2     2     3     4     4

最后,与arrayfun综合运用的一个例子,问题见于simwe forum,想了下可以采用下面的两种方式来完成:

请问如何查找矩阵中相同向量的位置?

比如矩阵A=【1,2,3,1;

2,3,4,2;

3,3,8,3】

向量为b =【1;2;3】

如何能不用循环找出b在A矩阵列中的位置,loc=【1 4】呢?

方法一:

A=[1,2,3,1;2,3,4,2;3,3,8,3];

B=[1;2;3];

C=find((ismember(A",B","rows"))");

方法二:

A=[1,2,3,1;2,3,4,2;3,3,8,3]

B=[1;2;3];

[M,N]=size(A);

N=1:N;

P=find(arrayfun(@(n) isequal(A(:,n),B),N));

版上回复的其它方法:

方法1:find(all(bsxfun(@eq,A,B)))

方法2:find(arrayfun(@(n) all(A(:,n)==B),1:4))

方法3: find(all(~bsxfun(@minus,A,B)))

方法4: find(arrayfun(@(n) isequal(A(:,n),B) ,1:4))

方法5:find(B"*A==sum(B.^2))

bsxfun和arrayfun函数非常有用,建议楼主参考帮助文档了解其用法。方法5是用了点数学方法,有时候我们多分析下问题会得到意想不到的结果。

也可以不那么复杂,我只会些简单的函数命令(其实和你的方法3一个思路)

%% 矩阵中寻找向量

clc

clear all

A=[1 2 3;1 2 3;2 3 4;3 4 5]"

B=repmat([1:3]",1,4)

D=find(~all(B-A,1))

%B = all(A, dim) tests along the dimension of A specified by scalar dim.

%dim=1:每一列都为非0,该列取1,否则取0,缺省;dim=2:行;dim=3:页,以此类推

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值