我有一个矩阵,z:
z = [0 0 0 0 0 0 0 0 0 0]
for i = 2:20
z(i,:) = z(i-1,:) + 5;
end
因此,这个循环将生成一个以零行开头的矩阵,然后为每一行添加额外的5。
我想知道当它达到30时如何冻结它,所以该行之后的所有值都会显示30秒。
因此应该看起来像这样:
0 0 0 ...
5 5 5 ...
10 10 10 ...
15 15 15 ...
20 20 20 ...
25 25 25 ...
30 30 30 ...
30 30 30 ...
30 30 30等。
答案 0 :(得分:2)
为了练习,您可以添加if
声明:
for i = 2:20
z(i, :) = z(i - 1, :) + 5;
if z(i, :) > 30
z(i, :) = 30;
end
end
...或使用min
加盖:
for i = 2:20
z(i, :) = min(z(i - 1, :) + 5, 30);
end
但是,如果使用矢量化操作,则可以完全避免此循环:
z = min(cumsum(5 * ones(20, 10)), 30)
答案 1 :(得分:2)
使用min
命令截断值。并使用矢量化
>> z = repmat( min( 0:5:95, 30 )', [1 10] )
z =
0 0 0 0 0 0 0 0 0 0
5 5 5 5 5 5 5 5 5 5
10 10 10 10 10 10 10 10 10 10
15 15 15 15 15 15 15 15 15 15
20 20 20 20 20 20 20 20 20 20
25 25 25 25 25 25 25 25 25 25
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30 30 30