Remove rows of zeroes, and extract the removed rows indices
1 次查看(过去 30 天)
显示 更早的评论
Hi all,
I have T =
0 0 0 0
1 2 0 4
5 6 0 8
0 0 0 0
10 11 0 12
t2=T(any(T,2),:) will give
t2 =
1 2 0 4
5 6 0 8
10 11 0 12
But how can I efficiently retrieve the indices of the removed rows from T, that is: 1,4 ?? Then how can I efficiently retrieve the indices of the not removed rows from T, that is: 2,3,5 ?? Without using while, for loop etc.
Thank you in advance.
0 个评论
采纳的回答
Star Strider
2017-3-4
编辑:Star Strider
2017-3-4
This works:
T = [0 0 0 0
1 2 0 4
5 6 0 8
0 0 0 0
10 11 0 12];
RemovedRows = all(T == 0, 2)
RemovedRowsIdx = find(RemovedRows)
KeptRowsIdx = find(any(T,2))
RemovedRows =
5×1 logical array
1
0
0
1
0
RemovedRowsIdx =
1
4
KeptRowsIdx =
2
3
5
EDIT — Remembered ‘KeptRowsIdx’.
4 个评论
Image Analyst
2017-3-4
If speed is what was needed, you shouldn't even use find() at all. I doubt he really needed the actual row numbers - that's why I didn't even bother to compute them. I think it's just the final matrix that is wanted. He'll probably never even use the row numbers again - so use logical indexing, which you already have, rather than doing the additional step to get linear indexing.
Star Strider
2017-3-4
@Image Analyst —
Possibly, but that wasn’t the impression I got.
Quoting:
- ‘But how can I efficiently retrieve the indices of the removed rows from T, that is: 1,4 ??Then how can I efficiently retrieve the indices of the not removed rows from T, that is: 2,3,5 ??’
The index numbers appear to be requested.
更多回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!