P
是m*2
点(m
)的[X Y]
矩阵,R
是n*4
矩阵n
} rectangles([X1 Y1 X2 Y2]
)。我希望以m*n
指示C
中第i个点位于{{1}中的第j个矩形内部的方式形成C(i, j)
矩阵P
}。
单点单项:
这是我检查点是否位于矩形内的方式:
R
更具可读性:
c = (P(1)>=R(1))&(P(1)<=R(3))&(P(2)>=R(2))&(P(2)<=R(4));
在上面的代码中,我确定c = (Px>=Rxmin)&(Px<=Rxmax))&(Py>=Rymin)&(Py<=Rymax);
和R(1)<=R(3)
:
R(2)<=R(4)
多个点重复:
很容易管理R(:, [1 3]) = sort(R(:, [1 3]), 2);
R(:, [2 4]) = sort(R(:, [2 4]), 2);
和m*1
个案(like second answer here)。但我不知道如何对1*n
案例进行矢量化。我目前正在使用for循环:
m*n
如何将其矢量化以提高效率?
答案 0 :(得分:1)
我建议您分别使用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已提供此时序比较