【问题标题】:Matlab: duplicate blocks of elements in a vectorMatlab:向量中的重复元素块
【发布时间】:2017-04-20 00:18:36
【问题描述】:

我想重复向量的元素,但考虑元素块(不使用任何循环)。

例如,考虑一个大小为 2 的块,我有一个类似 a = [1:6] 的向量,我希望输出看起来像这样 out = [1 2 1 2 3 4 3 4 5 6 5 6]

【问题讨论】:

  • 对于大小为 3 的块,预期输出是多少?
  • out = [1 2 3 1 2 3 4 5 6 4 5 6].
  • 对于大小为 5 的块?
  • 我只考虑块大小是 a (mod(length (a), block_size) == 0) 中元素数量的除数的情况
  • out = reshape(repmat(reshape(a,blocksize,[]),2,1),1,[])

标签: matlab vector duplicates repeat


【解决方案1】:

您可以reshape 输入,然后根据需要使用repmat 重复输入

blksize = 2;

tmp = repmat(reshape(a, blksize, 1, []), 1, blksize, 1);

output = tmp(:).';

说明

首先,我们要将您的矩阵重塑为blksize x 1 x (numel(a)/blksize) 矩阵。

A = reshape(a, blksize, 1, []);

然后我们想在第二个维度上重复Ablksize 次以创建必要的重复次数。

B = repmat(A, 1, blksize, 1);

然后我们将整个事物展平成一个数组,并且由于列优先排序,我们得到了所需的输出

output = B(:).'

可选单线

如果你真的想要一行,你可以再次使用reshape 而不是(:).'

output = reshape(repmat(reshape(a, blksize, 1, []), 1, blksize, 1), 1, []);

替代方案

您也可以使用 MATLAB 的 repelem 来完成重复

result = reshape(repelem(reshape(a, blksize, 1, []), 1, blksize, 1), 1, [])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多