vectorize expression containing if statement

1 vue (au cours des 30 derniers jours)
SA-W
SA-W le 13 Juil 2023
Commenté : the cyclist le 14 Juil 2023
A = [-5 3 2;2 3 4; 3 5 6; -2 8 9];
%compute product of columns in a vectorized fashion
A(:,1).*A(:,2).*A(:,3);
%calculate the above product only for the rows where the entry in the first column is positive
%solution I do not like. A is not needed anymore after the calculation
A(~(A(:,1)>0),:) = [];
A(:,1).*A(:,2).*A(:,3)
ans = 2×1
24 90
Is there a way to get the above 2x1 result vector using one single line of code? I would also be happy with a 4x1 vector that contains NaN when the condition is not met. The issue is that my real A is quite large in size, so I want to be as efficient as possible and avoiding unnecessary copies or temporary variables related to the condition.

Réponse acceptée

the cyclist
the cyclist le 13 Juil 2023
Modifié(e) : the cyclist le 13 Juil 2023
Here is one way:
A = [-5 3 2;2 3 4; 3 5 6; -2 8 9];
prod(A(A(:,1)>0,:),2)
ans = 2×1
24 90
You could also have done the first operation as
prod(A,2)
ans = 4×1
-30 24 90 -144
  2 commentaires
SA-W
SA-W le 13 Juil 2023
"Product of columns" was actually just an example that I created, so prod() is not really what I am looking for.
In my real code, A has six columns that contain the six independent components of a 3x3 symmetric matrix. I wanna compute the trace of the inverse matrix (formulae known) , but only if the determinant of the matrix is greater than zero. Do you have an idea for that as well?
the cyclist
the cyclist le 14 Juil 2023
This question is so different from what you oringally asked, that I'm wary of what is important.
Can't you just do
if det(M) > 0
<do the trace operation on M here>
end
?
If that isn't right, can I suggest you post a new question (because what you actually asked here was answered). You can upload your matrix using the paper clip icon in the toolbar, and then people can test code for speed on your actual data.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by