Subset of a matrix

3 次查看(过去 30 天)
Stéphane
Stéphane 2014-11-13
评论: Guillaume 2014-11-13
Hi,
This question is a bit tricky to explain with words, so I'll write the matlab code I would like...
Starting with : x = 1:5; y = (-5:5)'; iPos = y > 0;
I would like to write something like :
z = [y*x](iPos);
Which would be the equivalent of
z = y*x; z = z(iPos);
without creating the z matrix. I do it with Python but I can't figure out the way to do it in Matlab... Is it possible ?
Thanks

采纳的回答

Guillaume
Guillaume 2014-11-13
Did you mean
z(:, iPos)
as it's a bit unusual to use a logical index as a linear index when it's smaller than the number of elements in the matrix.
To answer your question, unfortunately, you can't index into temporaries in matlab, be it the result of an expression as in your example, or the return value of function. You always have to create a variable to store the result and there is no trick that can work around that.
However, in your case, you could do
z = y(iPos) * x(1);
Or if you meant to get all rows:
z = y(iPos) * x;
  2 个评论
Stéphane
Stéphane 2014-11-13
Thanks for your answer.
I actually have large 2D matrices and I apply different operations depending on conditions in both direction, so the way I found to do it is to apply binary masks.
By the way, I'm using these temporaries because I think it saves memory when using large matrices but I'm not sure about that...
Am I correct ?
Guillaume
Guillaume 2014-11-13
Can you show a more realistic example?
Note that even if matlab allowed
z = [y*x](iPos);
it would still use the same amount of memory.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by