查看: 103|回复: 3|关注: 0

[已解决] MATLAB如何给一个矩阵里的元素重复指定的不同的值

[复制链接]

新手

7 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
如题,已知列向量 x = [40 30 45 35 60]',y = [3 4 2 4 8]'。现在想把x里的值按照y里面对应的值进行重复,y的值是重复的次数,意思是把40重复3次,30重复4次,45重复2次,...,最后的60重复8次,效果是 xx = [40 40 40 30 30 30 30 45 45 35 35 35 35 60 60 60 60 60 60 60 60 60]'。原始的x和y数据很长,这里是简化的数据为了说明问题。请问应该怎么实现呢 ?谢谢大家。

新手

46 麦片

财富积分


050


0

主题

16

帖子

3

最佳答案
发表于 5 天前 | 显示全部楼层
本帖最后由 Allen___ 于 2019-7-12 12:20 编辑

复制代码
本楼代码之前有错误,修改版见4楼.

新手

7 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
 楼主| 发表于 5 天前 | 显示全部楼层
Allen___ 发表于 2019-7-11 17:29
这种方法不限制x,y的长度。
  1. x = [40 30 45 35 60]';
  2. y = [3 4 2 4 8]';
  3. xx = zeros(sum(y),1); %初始化xx
  4. for i = 1:length(x)
  5.     if i == 1
  6.         xx(1:y(i)) = x(i);
  7.     else
  8.         xx((y(i-1)+1):y(i)) = x(i);
  9.     end
  10. end
复制代码

不好意思,但是这段代码运行出来后面都是0,如图所示 p1.png

新手

46 麦片

财富积分


050


0

主题

16

帖子

3

最佳答案
发表于 4 天前 | 显示全部楼层 |此回复为最佳答案
zczczc08 发表于 2019-7-11 18:47
不好意思,但是这段代码运行出来后面都是0,如图所示
  1. x = [40 30 45 35 60]';
  2. y = [3 4 2 4 8]';
  3. xx = zeros(sum(y),1); %初始化xx
  4. for i = 1:length(x)
  5.     if i == 1
  6.         xx(1:y(i)) = x(i);
  7.     else
  8.         xx((sum(y(1:(i-1)))+1) : sum(y(1:i))) = x(i);
  9.     end
  10. end
复制代码


抱歉,之前写的时候有点疏忽,这个是我测试过没问题的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表