【发布时间】:2014-03-24 23:56:00
【问题描述】:
问题简介:
我正在建模一个系统,其中我有一个矩阵 X=([0,0,0];[0,1,0],...) ,其中每一行代表 3D 空间中的一个点。然后我选择一个随机行 r,并取所有后续行并围绕 r 表示的点旋转,并从这些行创建一个新矩阵 X_rot。我现在想检查 X_rot 中的任何行是否等于 X 中的任何行(即两个顶点相互重叠),如果是这样,请拒绝旋转并重试。
实际问题:
到目前为止,我使用了以下代码:
X_sim=[X;X_rot];
if numel(unique(X_sim,'rows'))==numel(X_sim);
X(r+1:N+1,:,:)=X_rot;
end
这可行,但它占用了我 50% 以上的运行时间,我正在考虑这里是否有人知道更有效的方法,因为我不需要从 unique 获得的所有信息.
附:如果这很重要,那么我通常在X 中有 100 到 1000 行。
最好的问候, 莫腾
补充:
我的x-matrix 包含 N+1 行,我有 12 种不同的旋转操作可以应用于子矩阵 x_rot:
step=ceil(rand()*N);
r=ceil(rand()*12);
x_rot=x(step+1:N+1,:);
x_rot=bsxfun(@minus,x_rot,x(step,:));
x_rot=x_rot*Rot(:,:,:,r);
x_rot=bsxfun(@plus,x_rot,x(step,:));
【问题讨论】:
-
分享你计算的代码
X_rot?
标签: matlab duplicates