【问题标题】:Matlab: How to combine two vectors in oneMatlab:如何将两个向量合二为一
【发布时间】:2017-08-18 17:06:21
【问题描述】:

我有两个向量

A = [...] %size 1x320
B = [...] %size 1x192

我想将这两个向量合二为一,但我想将它们组合的方式如下:

取向量 A 的前 5 个元素,然后从向量 B 中添加 3 个元素,从向量 A 中添加接下来的 5 个元素,然后从向量 B 中添加下一个元素,依此类推,直到两个向量合并为一个。我认为这个过程应该重复 64 次,因为 320/5=64192/3=64

是否有任何内置的 Matlab 函数可以做到这一点?

【问题讨论】:

  • 查看我的编辑以获取不涉及 for 循环的第二种解决方案。

标签: arrays matlab matrix vector concatenation


【解决方案1】:

我不认为有一个内置函数可以做到这一点,但以下内容会满足你的需求:

A=randi(10,1,320);
B=randi(10,1,192);
C=zeros(1,length(A)+length(B));
for i=1:5
    C(i:8:end)=A(i:5:end);
end
for i=6:8
    C(i:8:end)=B(i-5:3:end);
end

那么数组C就是组合数组。

编辑:另一种方法,没有 for 循环:

A=randi(10,1,320);
B=randi(10,1,192);
A_new=reshape(A,5,[]);
B_new=reshape(B,3,[]);
C=[A_new;B_new];
C=reshape(C,[1,numel(C)]);

在这个解决方案中,通过将reshape(A,5,[])中的第三个参数指定为[],我们允许它根据A的长度来调整列数,假设reshape数组的行数是5 . 另外,numel(C) 是数组C 的元素总数。所以这个解决方案也可以很容易地推广到更多的数组。

【讨论】:

    猜你喜欢
    • 2015-12-30
    • 2016-12-20
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2017-04-17
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多