Matlab 测试坐标(x,y)是否在矩阵内
我有一个矩阵D,如下所示:Matlab 测试坐标(x,y)是否在矩阵内,matlab,matrix,Matlab,Matrix,我有一个矩阵D,如下所示: D=[ 1 2 3 4 5 6 ] 我想做的是测试我在(ii,jj)位置的坐标是否属于D中的一行 换句话说,我有一个for循环,在它里面,如果验证“(ii&jj)属于D”行的条件为真,我想将一个变量增加1 例如,我们可以手动执行此操作: var = 0; for ii = 1: 20 for jj = 1:30 if((ii==1 && jj==2) || (ii==3 &a
D=[
1 2
3 4
5 6
]
我想做的是测试我在(ii,jj)
位置的坐标是否属于D中的一行
换句话说,我有一个for循环,在它里面,如果验证“(ii&jj)属于D”行的条件为真,我想将一个变量增加1
例如,我们可以手动执行此操作:
var = 0;
for ii = 1: 20
for jj = 1:30
if((ii==1 && jj==2) || (ii==3 && jj==4) || (ii==5 && jj==6))
var = var + 1;
end
end
end
这很简单,因为矩阵D只包含3行。但是在我的工作中,我大约有1000
行,因此D的大小为1000*2
。在这种情况下,我必须找到一种方法,可以做同样的工作,我已经写了上面,但自动和以非常快的方式。但是怎么做呢
事实上,人们可以考虑使用ismember
,例如:
var = 0;
for ii = 1 : 20
for jj = 1 : 30
if(ismember(ii, D(:,1)) && ismember(jj, D(:,2)))
var = var + 1;
end
end
end
但这是不正确的,因为例如,上面的代码可以找到ii=1
和jj=6
,但在这种情况下(ii,jj)
将是(1,6)
,并且不属于(1,2)
、(3,4)
和(5,6)
请,任何帮助都将不胜感激 您可以使用“行”
输入来检查数组是否是矩阵中的一行
tf = ismember([ii,jj], D, 'rows');
您还可以同时检查ii
和jj
的多个值
% Create all permutations of ii and jj
[ii,jj] = ndgrid(1:20, 1:30);
% Test all of these permutations to see which ones are in D
tf = ismember([ii(:), jj(:)], D, 'rows');
然后计算var
var = sum(tf);
如果处理的是非整数,则应使用ismembertol
来处理可能的浮点错误。您可以使用'rows'
输入来检查数组是否是矩阵中的一行
tf = ismember([ii,jj], D, 'rows');
您还可以同时检查ii
和jj
的多个值
% Create all permutations of ii and jj
[ii,jj] = ndgrid(1:20, 1:30);
% Test all of these permutations to see which ones are in D
tf = ismember([ii(:), jj(:)], D, 'rows');
然后计算var
var = sum(tf);
如果您处理的是非整数,则应使用ismembertol
来处理可能的浮点错误。为了可读性,请正确缩进If
和中的语句。为了可读性,请正确缩进If
和中的语句。