【发布时间】:2017-02-14 14:14:01
【问题描述】:
我的任务是编写一个程序来创建一个向量,它的前 10 个元素为 10,元素 11-20 为 20,元素 21-30 为 30,元素 31-40 为 40,& 元素41-50 为 50。
我就是这样做的。
v=zeros(1,50);
for i = 1:10
v(i)=10;
end
for i =11:20
v(i)=20;
end
for i = 21:30
v(i)=30;
end
for i = 31:40
v(i)=40;
end
for i = 41:50
v(i)=50
end
我怎样才能更有效地写这个? (我是 matlab 和一般编程的新手。我正在考虑如何使用 while 或 if 循环来构造它,但无法生成更高效的代码。)
【问题讨论】:
-
我会复制向量
[10:10:50]以创建该向量的 10 行,然后将其重塑为行向量:reshape(repmat((10:10:50), 10, 1), 1, []) -
非常代数,而且很可能比 Suever 的解决方案效率低,但仍然...
v = reshape(10*ones(10,1)*(1:5),1,[]); -
另一种选择类似于
v=floor(1:0.1:5.9)*10;,它的效率略高,但可读性较差。 -
只是一个帮助您理解 cmets 的注释:如果您想使用 Matlab 更高效,请避免循环,并且更喜欢矢量化。
-
@F88 请考虑接受一个答案。谢谢!
标签: matlab if-statement for-loop while-loop vectorization