我在删除矩阵末尾的剩余行时遇到问题。通常,我需要删除包含特定列中特定元素的行,而不使用循环。这似乎很容易,但我仍然继续得到一些奇怪的结果。
举个简单的例子,让我们有一个10x10矩阵A:
A=[1:10; 901:910; 201:210; 301:310; 701:710; 401:410; 601:610; 501:510; 801:810; 101:110];
我想删除(为了更好地说明只需替换),从第四行到最后一行,其第三列包含的值大于600.结果应如下所示:
| 1 2 3 4 5 6 7 8 9 10|
|901 902 903 904 905 906 907 908 909 910|
|201 202 203 204 205 206 207 208 209 210|
|301 302 303 304 305 306 307 308 309 310|
| 1 1 1 1 1 1 1 1 1 1|
|401 402 403 404 405 406 407 408 409 410|
| 1 1 1 1 1 1 1 1 1 1|
|501 502 503 504 505 506 507 508 509 510|
| 1 1 1 1 1 1 1 1 1 1|
|101 102 103 104 105 106 107 108 109 110|
我的想法是这样的:
A(A(4:end,3)>600,:)=[1];
但结果是一些无意义的矩阵。
感谢您的帮助!
答案 0 :(得分:1)
A([false(3,1);A(4:end,3)>600],:)=1;
并且正如@yoda所说,要删除行,请执行以下操作:
A([false(3,1);A(4:end,3)>600],:)=[];
答案 1 :(得分:0)
首先,您的问题是在矩阵内输入矩阵意味着使用矩阵的值作为索引。因为你的矩阵只有零和1(由于“<”运算符)你得到了一个奇怪的结果。
要回答您的问题,您需要用较小的矩阵替换矩阵。就像是: A = new_matrix
new_matrix是通过仅采用您想要的行来生成的。
new_matrix = A(row_indices,:)
其中row_indices是您要保留的索引的向量。要构建它,你可以从一个零向量开始并应用find(它将产生带有一个的索引)。所以我们想:
row_indices = find([1,1,1,A(4:end,3)。'< 600])
前3个是因为你总是想要前3行。 所以把所有东西放在一起给出了
A = A(find([1,1,1,A(4:end,3).'<600]),:)
在示例值上运行此操作:
>> A=[1:10; 901:910; 201:210; 301:310; 701:710; 401:410; 601:610; 501:510; 801:810; 101:110];
>> A(find([1,1,1,A(4:end,3).'<600]),:)
ans =
1 2 3 4 5 6 7 8 9 10
901 902 903 904 905 906 907 908 909 910
201 202 203 204 205 206 207 208 209 210
301 302 303 304 305 306 307 308 309 310
401 402 403 404 405 406 407 408 409 410
501 502 503 504 505 506 507 508 509 510
101 102 103 104 105 106 107 108 109 110
顺便说一下,将这些行更改为1就是这么简单:
A(find([0,0,0,A(4:end,3).'>600]),:) = 1