subsref works as not expected
1 次查看(过去 30 天)
显示 更早的评论
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{:, :});
Is there any way to unpack cell array without direct access through {:}?
0 个评论
采纳的回答
Bruno Luong
2021-1-12
编辑:Bruno Luong
2021-1-12
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 个评论
Bruno Luong
2021-1-12
编辑:Bruno Luong
2021-1-12
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{:})
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Whos 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!