如何用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.