Related to finding columns of a matrix satisfying specific conditions
2 次查看(过去 30 天)
显示 更早的评论
Hello all,consider the 8 X 4 matrix whose columns are shown below: (Note: Actually we have a large matrix of dimension 8 X 500, but for simplicity we are considering 8 X 4 matrix).
My query is how to find the columns in which only the 3rd and 5th row are non-zero while all other rows are zero.
Any help in this regard will be highly appreciated.
% Col 1
0.00000000000000 + 0.00000000000000i
1.50731573207606 + 0.0126629716692995i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
1.05524235130179 - 1.06946690410098i
% Col 2
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
0.570954576337680 - 0.0694208400277470i
0.00000000000000 + 0.00000000000000i
-0.439792062677585 + 0.906860087559601i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
% Col 3
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
-0.803157531649936 - 0.535481484911063i
0.00000000000000 + 0.00000000000000i
-0.669680856264729 + 0.552075228739879i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
% Col 4
-0.208494084667111 - 0.237272112154493i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
0.00000000000000 + 0.00000000000000i
-0.117364925574855 + 0.139800044597261i
0.00000000000000 + 0.00000000000000i
0 个评论
采纳的回答
Walter Roberson
2023-10-25
nz = YourMatrix ~= 0;
pattern = [false; false; true; false; true; false; false; false];
matching_column_mask = all(nz == pattern, 1);
You can use matching_column_mask fairly directly, but if you really need to you can find() on it.
Note that I interpreted "3rd and 5th row are non-zero" to mean that they must be non-zero, rather than that they are permitted to be non-zero.
If the rule were that those rows are permitted to be non-zero then
matching_column_mask = all(YourMatrix([1 2 4 6 7 8],:) == 0,1);
4 个评论
Walter Roberson
2023-10-25
rows_to_match = [3, 5];
nz = YourMatrix ~= 0;
pattern = false(height(YourMatrix),1);
pattern(rows_to_match) = true;
matching_column_mask = all(nz == pattern, 1);
The above should work provided that at the time of execution you know which two rows you want to check.
更多回答(1 个)
Bruno Luong
2023-10-25
编辑:Bruno Luong
2023-10-25
% Generate a test matrix
X = rand(8, 500);
X(:,10) = [0 0 3 0 5 0 0 0];
X(:,20) = [0 0 0 0 5 0 0 0]; % won't be detected since X(3,20) is zeros
mask = true(size(X,1),1);
mask([3,5]) = false;
find(all(xor(mask, logical(X)), 1))
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!