Matlab中的元素阵列复制

Dim*_*ima 18 arrays matlab repeat run-length-encoding elementwise-operations

假设我有一维数组:

a = [1, 2, 3];
并复制数组的每个元素n次?

例如,n应该返回replicate(a, 3).

请注意,这与...完全不同[1,1,1,2,2,2,3,3,3].我当然可以repmat通过replicate对每个元素进行实现并连接结果来实现,但我想知道是否有更高效的内置函数.

gno*_*ice 21

我是KRON功能的粉丝:

>> a = 1:3;
>> N = 3;
>> b = kron(a,ones(1,N))

b =

    1     1     1     2     2     2     3     3     3
Run Code Online (Sandbox Code Playgroud)

您还可以查看此相关问题(处理复制二维矩阵的元素)以查看涉及矩阵索引的其他一些解决方案.这是一个这样的解决方案(灵感来自Edric的答案):

>> b = a(ceil((1:N*numel(a))/N))

b =

    1     1     1     2     2     2     3     3     3
Run Code Online (Sandbox Code Playgroud)


Amr*_*mro 20

a = [1 2 3];
N = 3;

b = reshape(repmat(a,N,1), 1, [])
Run Code Online (Sandbox Code Playgroud)

  • 与`kron`不同,这个解决方案纯粹是内存管理,不会将乘法拖入其中. (5认同)

cha*_*pjc 13

从R2015a开始,有一个内置和记录的功能来执行此操作repelem:

repelem复制数组的元素.
    W = repelem(V,N),使用向量V和标量N,创建一个向量W,其中每个元素V重复N一次.

第二个参数也可以是一个长度相同的向量,V以指定每个元素的复制数.对于2D复制:

B = repelem(A,N1,N2)
Run Code Online (Sandbox Code Playgroud)

不再需要kron或其他技巧了!

更新:要与其他快速方法进行性能比较,请参阅数组元素的Q&A 重复副本:MATLAB中的行程解码.

  • @LuisMendo预发布.我喜欢阅读发行说明几乎和accumarray一样多.:).但我立刻删除了我的答案,然后在发布日取消删除它,以免破坏预发布的条款. (5认同)
  • 在 R2015a 发布之前你怎么知道这一点? (2认同)