Select certain sub-matrix from matrix
显示 更早的评论
Hi everyone, I have a matrix in such form that:
1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1
1 0 1 1 1 1 1 1 1 0
1 1 0 1 1 1 1 0 0 1
1 1 0 0 0 0 0 1 1 1
I would like to single out the sub-matrix enclosed (above zeros) by zero elements, and set them all to zero as well. I knew it can be done by a simple for loop, since I need to run it many times, I want to vectorize the process. Thanks in advanced for any help and suggestion.
4 个评论
Vaclav Rimal
2016-3-15
Playing go?
Thomas
2016-3-15
Vaclav Rimal
2016-3-16
After your edit, the problem became more simple. What about this (suppose your original matrix is called a):
[m,pos]=min(a);
for i=1:size(a,2)
a(1:pos(i),i)=0;
end
However, I can't think of any way to avoid the for cycle. Probably indexing the matrix elements in the column-vector, one-index manner?
回答(1 个)
Guillaume
2016-3-16
If all you want to do is propagate the zeros upward then a cumprod on the flipped up-down matrix is all that's needed:
a = [1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1
1 0 1 1 1 1 1 1 1 0
1 1 0 1 1 1 1 0 0 1
1 1 0 0 0 0 0 1 1 1];
flipud(cumprod(flipud(a)))
类别
在 帮助中心 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!