【发布时间】:2018-01-14 18:32:47
【问题描述】:
我的问题如下,我考虑了很多推导:
我有一个数组,比如尺寸 dims = c(10000, 5, 2) - 即 10 行、5 列和 2 个子数组。
我希望能够使用 sample() 函数对每个子数组中给定比例(例如 m)的行进行采样,并将它们移动到子数组之间。
因此,假设将第 5 行子数组 1 与子数组 2 的第 10 行交换(参见下面的示例)。
我问了一个类似的问题
并得到了一些很大的帮助。
该解决方案很有用,但仅限于对行进行随机采样(意味着不会对所有子数组进行采样)。
, , 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 4 3 4 4 3 4 5 2 4 4
[2,] 1 4 3 5 4 5 4 5 2 4
[3,] 1 5 2 1 1 2 1 4 5 1
[4,] 3 1 1 3 5 4 2 4 4 4
[5,] 3 2 5 1 2 2 5 5 4 3 <-- e.g., switch this row
[6,] 4 5 5 2 3 4 1 3 5 5
[7,] 5 5 5 5 1 4 3 1 2 5
[8,] 3 4 3 1 3 3 4 3 2 3
[9,] 1 1 3 2 4 4 1 4 2 3
[10,] 1 4 4 2 4 2 4 2 2 1
, , 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 5 5 1 1 5 2 1 4 3 1
[2,] 4 3 2 4 3 5 5 5 4 3
[3,] 2 4 1 1 4 2 2 2 3 4
[4,] 5 1 4 5 4 4 3 4 4 5
[5,] 1 5 5 4 3 3 5 2 2 2
[6,] 2 2 2 2 5 5 3 4 3 5
[7,] 5 2 1 1 2 5 3 4 4 2
[8,] 3 4 3 3 1 3 3 2 3 5
[9,] 2 1 4 4 3 2 4 5 5 2
[10,] 5 3 4 5 4 3 5 1 2 3 <-- with this row
在上面的示例中,m = 0.10,即每个子数组中 10% 的行(1 行)被采样然后交换。
关于如何强制 sample() 在所有子数组中采样的任何想法?理想情况下,每个子数组中的行数会非常大(10000 或更多)。
虽然我只包含了 2 个子数组,其中一个或多个随机行与子数组 2(由 m 指示)中的一个或多个随机行交换,但我需要一个可推广到 k 个子数组的例程。因此,如果 k = 3,则采样发生在所有子数组中,随机行与相邻子数组交换。
因此,子数组 1 中的一个或多个随机行移动到子数组 2 或子数组 3 的机会相同(只要它们总是在子数组之间移动,它们去哪一个子数组行都没有关系。然后,子数组 2 或 3 中的相应行将转到子数组 1。
行数必须保持不变。例如,子数组 1 中不能有 11 行,子数组 2 中只有 9 行——它必须是 10 和 10。
我不知道有任何软件包可以做到这一点。这里的目标是模拟动物的运动。
非常感谢任何想法。
【问题讨论】: