如何在矩阵中达到某个数字时冻结数字

时间:2013-10-28 15:23:06

标签: arrays matlab if-statement for-loop matrix

我有一个矩阵,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等。

2 个答案:

答案 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