subsref works as not expected

1 vue (au cours des 30 derniers jours)
Sergey Kasyanov
Sergey Kasyanov le 12 Jan 2021
Commenté : Sergey Kasyanov le 12 Jan 2021
Hello!
Let's create random cell array.
test = {1,2,3,4};
And try to evaluate simple code
res_1 = ones(subsref(test, substruct('{}', {':',':'})));
res_2 = ones(test{:, :});
Results unmatch but it should to match according with subsref help. Why?
Is there any way to unpack cell array without direct access through {:}?

Réponse acceptée

Bruno Luong
Bruno Luong le 12 Jan 2021
Modifié(e) : Bruno Luong le 12 Jan 2021
I knew it for sometime: subsref never work to emulate comma list (not sure if it's documented), because a non trivial comma list (with length > 1) can never be considered as function output .
This limitation surely deserves to be in "what frustrates you ..." thread.
  3 commentaires
Bruno Luong
Bruno Luong le 12 Jan 2021
Modifié(e) : Bruno Luong le 12 Jan 2021
First MATLAB won't allow such cascade syntax (this deserves to be "what frustrates you ..." thread as well)
some_function(var_1, var_2){:}
Example:
>> num2cell(1:3)
ans =
1×3 cell array
{[1]} {[2]} {[3]}
>> num2cell(1:3){:}
Error: Indexing with parentheses '()' must appear as the last operation of a valid indexing expression.
The best you can do is this
A = rand(3,4,5)
idx = some_function(1:2,3:4,':');
B = A(idx{:})
function c = some_function (varargin)
c = varargin;
end
But then the function some_function is not useful in any way. Just work directly with cell and comma list will do the same job:
A = rand(3,4,5)
idx = {1:2,3:4,':'};
B = A(idx{:})
Sergey Kasyanov
Sergey Kasyanov le 12 Jan 2021
Thanks!

Connectez-vous pour commenter.

Plus de réponses (0)

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by