matlab - 带单元格的 Subsref

标签 matlab subset cell-array matrix-indexing

这个问题是我在answering this question时出现的.这应该是我正在做的一些愚蠢的错误,但我无法理解它是什么错误......

myMatrix = [22 33; 44 55]

返回:

>> subsref(myMatrix, struct('type','()','subs',{{[1 2]}} ) );    

ans =

    22    44

与细胞一起使用时:

myCell = {2 3; 4 5} 

返回:

>> subsref(myCell,struct('type','{}','subs',{{[1 2]}} ) );

ans =

     2  % WHATTT?? Shouldn't this be 2 and 4 Matlab??

检查 subsref documentation ,我们看到:

See how MATLAB calls subsref for the expression:

A{1:2} The syntax A{1:2} calls B = subsref(A,S) where S.type='{}' and S.subs={[1 2]}.

这似乎不是真的,因为 subsref 的返回值只是第一个参数,而不是所有参数。

如果有人这样做:

>> [a,b]=subsref(myCell,struct('type','{}','subs',{{[1 2]}} ) ) 

a =

     2


b =

     4 % Surprise!

但这与自动返回的 myCell{[2 4]} 不同:

>> myCell{[1 2]}                                               

ans =

     2


ans =

     4

我需要为每个使用访问 myCell 的索引使用 subsref 和一个输出,还是我遗漏了什么?

最佳答案

当大括号 ({}) 用于索引 cell array 时, 输出是 comma-separated list .这隐式调用了 subsref但行为与直接调用它略有不同。

subsref本身是一个技术上的函数,由花括号返回的逗号分隔列表的行为类似于 varargout。在这种情况下。这意味着您应该为所有所需的输出结果指定一个适当的“接收器”,就像您对任何其他返回多个参数的函数所做的那样,否则它们将被忽略。

关于matlab - 带单元格的 Subsref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18384735/

相关文章:

R 如何在组合子集上 "split"?

r - 基于应用于多列的单个条件对数据框进行子集

matlab - 访问单元格的预定义元素

arrays - 根据其内容将向量拆分为多个向量

matlab - 计算矩阵中每一行的范数

c++ - 将 OpenMP 支持添加到使用 Visual Studio 2010 从 C 文件编译的 mex 文件

Python:使用负函数比较元胞数组

matlab - 将数据 block 读入matlab数组

r - 如何按组拆分数据框?

string - 在 MATLAB 中将元胞数组转换为字符串