1

我有一个零和一的矩阵。每个具有一个值的单元格表示一个非空单元格。带有这些的单元格保存在带有坐标的向量中。我正在遍历列表并将每个元素随机移动到其空闲的相邻单元格之一。

有没有办法通过矢量运算来做到这一点?

谢谢

4

2 回答 2

1

这是一种尝试,不是最优雅或最有效的尝试,但它仍然应该有效。

首先我假设你有你的非空单元格的 x,y 坐标,比如

c=[x y];

二维数组中 8 个最近邻 (nn) 的相对位置由下式给出:

nn=[1 1;1 -1;-1 1;0 -1;-1 0;0 1;1 0;-1 -1];

让我们c在其 nn 周围对每个 x,y 坐标进行所有可能的排列

permc=bsxfun(@plus,repmat(c,[1 8]),nn(:)');

现在为每个 x,y 坐标从 8 个选项中设置一个随机 nn 向量:

ri=randi(8,numel(x), 1);

并用它来选择随机的新坐标

new_c= [ permc(sub2ind(size(permc), (1:numel(x))', 2*ri-1 )) , ...
         permc(sub2ind(size(permc), (1:numel(x))', 2*ri))];  

问题:

  • c该代码不检查是否有一个不免费的 nn ,不难解决permc手头的信息。

  • 代码不关心点是否在数组的边缘,因此它可以选择比数组大小大 0 或 1 的坐标。同样,permc有处理这种情况的信息,并且可以通过多种方式单独处理。

就是这样。

于 2013-01-19T07:41:50.933 回答
0

可能,但我认为写起来会很棘手。您必须小心防止两个“点”同时移动到同一个空白位置。

循环遍历向量并一次处理一个点似乎要容易得多。你想用向量运算来做这件事的原因是什么?如果您希望使您的代码更快,请发布您的代码并寻求建议。

于 2013-01-18T19:07:23.133 回答