Matlab 如何对矩形(边框)复选框内的成对点进行矢量化?
Matlab 如何对矩形(边框)复选框内的成对点进行矢量化?,matlab,geometry,vectorization,Matlab,Geometry,Vectorization,p是m点([xy])的m*2矩阵,R是n矩形([X1 Y1 X2 Y2])的n*4矩阵。我想形成一个m*n矩阵,C,以C(I,j)指示P中的第I个点是否位于R中的第j个矩形内 单点单矩形: 这是检查点是否位于矩形内的方法: c = (P(1)>=R(1))&(P(1)<=R(3))&(P(2)>=R(2))&(P(2)<=R(4)); 多点多矩形: 很容易管理m*1和1*n案例()。但我不知道如何向量化m*ncase。我目前正在使用for循环执行
p
是m
点([xy]
)的m*2
矩阵,R
是n
矩形([X1 Y1 X2 Y2]
)的n*4
矩阵。我想形成一个m*n
矩阵,C
,以C(I,j)
指示P
中的第I个点是否位于R
中的第j个矩形内
单点单矩形:
这是检查点是否位于矩形内的方法:
c = (P(1)>=R(1))&(P(1)<=R(3))&(P(2)>=R(2))&(P(2)<=R(4));
多点多矩形:
很容易管理m*1
和1*n
案例()。但我不知道如何向量化m*n
case。我目前正在使用for循环执行此操作:
m = size(P, 1);
n = size(R, 1);
C = false(m, n);
for i=1:n
C(:, i) = (P(:, 1)>=R(i, 1))&(P(:, 1)<=R(i, 3))& ...
(P(:, 2)>=R(i, 2))&(P(:, 2)<=R(i, 4));
end
m=尺寸(P,1);
n=尺寸(R,1);
C=假(m,n);
对于i=1:n
C(:,i)=(P(:,1)>=R(i,1))&(P(:,1)=R(i,2))&(P(:,2)我建议您分别处理
P
和R
的每一列,然后在末尾按位处理它们:
Px = P(:,1);
Rx1 = R(:,1).';
Rx2 = R(:,3).';
X1 = bsxfun(@ge, Px, Rx1);
X2 = bsxfun(@le, Px, Rx2);
Py = P(:,2);
Ry1 = R(:,2).';
Ry2 = R(:,4).';
Y1 = bsxfun(@ge, Py, Ry1);
Y2 = bsxfun(@le, Py, Ry2);
C = X1 & X2 & Y1 & Y2
或者,如果您愿意:
C = bsxfun(@ge, P(:,1), R(:,1).')& ... % X lower bound
bsxfun(@le, P(:,1), R(:,3).')& ... % X upper bound
bsxfun(@ge, P(:,2), R(:,2).')& ... % Y lower bound
bsxfun(@le, P(:,2), R(:,4).'); % Y upper bound
OP提供了这个时间比较
Px = P(:,1);
Rx1 = R(:,1).';
Rx2 = R(:,3).';
X1 = bsxfun(@ge, Px, Rx1);
X2 = bsxfun(@le, Px, Rx2);
Py = P(:,2);
Ry1 = R(:,2).';
Ry2 = R(:,4).';
Y1 = bsxfun(@ge, Py, Ry1);
Y2 = bsxfun(@le, Py, Ry2);
C = X1 & X2 & Y1 & Y2
C = bsxfun(@ge, P(:,1), R(:,1).')& ... % X lower bound
bsxfun(@le, P(:,1), R(:,3).')& ... % X upper bound
bsxfun(@ge, P(:,2), R(:,2).')& ... % Y lower bound
bsxfun(@le, P(:,2), R(:,4).'); % Y upper bound