如何用MATLAB实现多矢量元素的重复?

如何用MATLAB实现多矢量元素的重复?,matlab,for-loop,Matlab,For Loop,我有两个数据向量d1=[1 2 1 3 4]和d2=[3 1 2 1],还有两个参考howMany1=[3 2 2 1 2]和howMany2=[2 1 2 2 2]。d1和d2的元素将根据howMany1和howMany2的元素进行重复:因此d1(1)即d1的第一个元素应重复3次,d1(2)应重复2次,依此类推。。最后的结果应该是d1\u repeated=[1 1 2 1 3 4]和d2\u repeated=[3 3 1 2 1] 我怎样才能在MATLAB中做到这一点?我回顾了一篇类似的文

我有两个数据向量
d1=[1 2 1 3 4]
d2=[3 1 2 1]
,还有两个参考
howMany1=[3 2 2 1 2]
howMany2=[2 1 2 2 2]
。d1和d2的元素将根据howMany1和howMany2的元素进行重复:因此d1(1)即d1的第一个元素应重复3次,d1(2)应重复2次,依此类推。。最后的结果应该是
d1\u repeated=[1 1 2 1 3 4]
d2\u repeated=[3 3 1 2 1]

我怎样才能在MATLAB中做到这一点?我回顾了一篇类似的文章,其中有一个向量被重复,所以我试着做同样的事情,并做了一个for循环。这是我的密码:

clear all
close all
clc
% data

d1 = [1 2 1 3 4];
d2 = [3 1 2 1];
howMany1 = [3 2 2 1 2]; % Determines how many times each index in IDX1 should be repeated.
howMany2 = [2 1 2 2];
d = {d1 d2}
howMany = {howMany1 howMany2}
Anew = cell(1,2)
for k = 1:2 % 2 data vectors     
Anew{1,k} = arrayfun(@(x) repmat(d{k}(x), howMany{k}(x), 1), 1:numel(d{k}), 'uni', 0);
Anew = vertcat(Anew{:});

end
但我收到以下错误:

Error using vertcat

Dimensions of matrices being concatenated are not consistent.
然后,我尝试将垂直猫改为horzcat,但我收到了双打组的重复:

Anew = 

  Columns 1 through 7

    [3x1 double]    [2x1 double]    [1]    [2x1 double]    [2x1 double]    [2x1 double]    [3]

  Column 8

    [2x1 double]

我想知道这里有什么问题?感谢您抽出时间。

这可以通过组合ismember和cumsum来完成:

d1(cumsum(ismember(1:sum(howMany1),cumsum([1 howMany1]))))
细分

1:sum(howMany1)
howMany1
的累计和进行比较。这是一个带有1和0的向量,显示d1中下一个值的起始位置

ismember(1:sum(howMany1),cumsum([1 howMany1]))
ans =
     1     0     0     1     0     1     0     1     1     0
此项的累积和给出的向量如下所示:

cumsum(ismember(1:sum(howMany1),cumsum([1 howMany1])))
ans =
     1     1     1     2     2     3     3     4     5     5
现在,在创建d1\U时,可以将其用作
d1
的索引

d1(cumsum(ismember(1:sum(howMany1),cumsum([1 howMany1]))))
ans =
     1     1     1     2     2     1     1     3     4     4

除了国旗上的重复问题,另请参见。尽管这是一个重复的问题,但这是一个新颖的答案。巧妙地使用
ismember
+1.