我定义了一个6乘6的矩阵,并希望在某些范围内对值进行更改.
c = floor(rand(6,6) * 100)
Run Code Online (Sandbox Code Playgroud)
结果:
22 26 10 2 9 3
38 82 90 42 59 6
58 98 87 31 47 31
25 73 81 16 69 53
29 34 26 17 69 65
61 58 59 42 63 40
Run Code Online (Sandbox Code Playgroud)
然后我跑:
c(c(1:3,:)<17) = 0
22 0 0 2 9 3
38 82 90 42 59 6
58 98 87 31 47 31
25 0 0 16 69 53
29 34 0 17 69 65
61 58 59 42 63 40
Run Code Online (Sandbox Code Playgroud)
我想在1到3之间的行中生成小于17的行,但结果对我来说似乎不对!任何的想法?
这不起作用,因为您从条件中获得线性索引,并且子矩阵的大小与原始索引的大小不同.您可以先获取下标,然后更改原始矩阵:
c = floor(rand(6,6) * 100)
c =
28 60 24 48 20 99
0 78 34 80 38 70
49 11 54 37 66 8
98 57 6 51 75 4
73 87 41 9 17 49
31 68 23 90 51 44
[a,b]=find(c(1:3,:)<17);
c(sub2ind(size(c),a,b))=0
c =
28 60 24 48 20 99
0 78 34 80 38 70
49 0 54 37 66 0
98 57 6 51 75 4
73 87 41 9 17 49
31 68 23 90 51 44
Run Code Online (Sandbox Code Playgroud)
请注意,如果你不从第一行或第一列开始,你应该考虑区别:
[a,b]=find(c(3:6,2:5)<17);
c(sub2ind(size(c),a+2,b+1))=0
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是创建用于替换的标记的掩码矩阵.这也适用于不从第一行或第一列开始的一般情况:
idx = zeros(size(c));
idx(1:3,:) = c(1:3,:)<17;
c(idx==1) = 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |