我正在尝试随机重新排列矩阵中的补丁。对于较大的矩阵和较小的补丁需要这样做,所以for循环似乎不是实现这一点的一个选项。假设我有一个像这样的数据矩阵:data <- matrix(1:16, nrow = 4)
输出如下
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
现在我想选择2x2补丁并随机重新排列它们,以便输出如下所示
[,1] [,2] [,3] [,4]
[1,] 11 15 3 7
[2,] 12 16 4 8
[3,] 9 13 1 5
[4,] 10 14 2 6
到目前为止,我通过创建一个包含与索引对应的数字的矩阵来实现这一点,并重新排列,但是当有数万个补丁时,在for循环中为每个补丁重新分配到一个新的空矩阵会非常耗时。
3条答案
按热度按时间ftf50wuq1#
这里有一个你可以使用的方法。我假设子矩阵块均匀地划分到矩阵中。
z9zf31ra2#
下面是一种使用嵌套
sequence
调用的线性索引的方法。它几乎可以立即重新排列700x700矩阵。测试:
为更大的矩阵计时
使用
kronecker
的另一个选项。这有点慢,但逻辑可能更容易理解。8wigbo563#
你可以试试下面的代码
它可以产生