Related to finding columns of a matrix satisfying specific conditions
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
chaaru datta
el 25 de Oct. de 2023
Comentada: chaaru datta
el 25 de Oct. de 2023
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 comentarios
Respuesta aceptada
Walter Roberson
el 25 de Oct. de 2023
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 comentarios
Walter Roberson
el 25 de Oct. de 2023
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.
Más respuestas (1)
Bruno Luong
el 25 de Oct. de 2023
Editada: Bruno Luong
el 25 de Oct. de 2023
% 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))
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!