我正在寻找一个与 R for Matlab 中的 rep
函数类似的函数。例如,使用 rep
我可以执行以下操作:
> rep(c(1,2,3),times=3)
[1] 1 2 3 1 2 3 1 2 3
> rep(c(1,2,3),each=3)
[1] 1 1 1 2 2 2 3 3 3
>
在matlab中有repmat函数完成了第一部分
>> repmat([1,2,3],1,3)
ans =
1 2 3 1 2 3 1 2 3
但不是第二部分(或者至少我不知道该怎么做)。
有什么建议吗?
通过首先定义一个函数,您可以相当接近地重现 R 中 rep 函数的语法:
function [result]=rep(array, count)
matrix = repmat(array, count,1);
result = matrix(:);
然后您可以通过调用行向量或列向量来重现所需的行为:
>> rep([1 2 3],3)
ans =
1 1 1 2 2 2 3 3 3
>> rep([1 2 3]',3)
ans =
1 2 3 1 2 3 1 2 3
请注意,我在第二次调用中使用转置 (') 运算符将输入数组作为列向量(3x1 矩阵)传递。
我在我的笔记本电脑上对此进行了基准测试,对于一个包含 100,000 个元素重复 100 次的基本数组,它比使用上面的 ceil 选项快 2 到 8 倍,具体取决于您想要第一种还是第二种排列。