我有一个问题,在100x100的网格上有4个对象(1s)被分成16个均匀的25x25的正方形。 我需要创建一个(16^4 * 4)表,其中条目列出了16个子表中这4个对象中每个对象的所有可能位置。只要不相互重叠,对象可以位于子矩阵内的任何位置。这显然是一个置换问题,但由于索引和位置必须是随机的,但在16个方格内不重叠的事实会增加复杂性。会爱任何指针!MATLAB - 在网格特定区域随机指数的排列
我试图做的是创建一个名为“top_left_corner(position)”的函数,它返回您所在子矩阵左上角的下标。 top_left_corner(1)=(1,1),top_left_corner(2)=(26,1),等。然后我有:
pos = randsample(24,2);
I = pos(1)+top_left_corner(position,1);
J = pos(2)+top_left_corner(position,2);
的问题是如何生成和的这个商店排列在表中作为线性指数。
哇!谢谢,这绝对是真棒。真的很感谢:) –
我可能会补充说我最终做了一些与“perm_rnd”不同的事情,因为它并没有完全取得我需要的排列。 'range = 0:15; 组合= permn(范围,4); perms =转置(组合); perm_rnd =零(大小(perms));' 这是使用permn函数,可以发现[这里](https://www.mathworks.com/matlabcentral/fileexchange/7147-permn-v--n--k-) –
没有区别。由于numel(0:15)> 4,所以都生成笛卡尔积 – rahnema1