我如何索引一个由函数返回的MATLAB数组,而不首先将它赋值给局部变量呢?

我如何索引一个由函数返回的MATLAB数组,而不首先将它赋值给局部变量呢?

例如,如果我想从magic(5)我可以这样做:

M = magic(5);value = M(3,3);

得到value == 13。我想做一些类似这样的事情:

value = magic(5)(3,3);value = (magic(5))(3,3);

去掉中间变量然而,matlab抱怨Unbalanced or unexpected parenthesis or bracket之前的第一个括号。3.

是否可以从数组/矩阵中读取值,而不首先将其分配给变量?



森栏
浏览 1774回答 4
4回答

拉风的咖菲猫

只是好博客在……上面洛伦谈Matlab的艺术几天前有几颗可能有用的宝石。特别是,使用助手函数,如:paren = @(x, varargin) x(varargin{:});curly = @(x, varargin) x{varargin{:}};哪里paren()可以像paren(magic(5), 3, 3);会回来ans = 16我还推测这将比新手的回答更快,但我还没有检查(使用分析器!)。也就是说,您还必须在某个地方包含这些函数定义。我个人已经使他们在我的道路上独立的功能,因为他们是超级有用的。这些函数和其他功能现在可以在函数式程序设计结构可通过matlab外接程序资源管理器或文件交换.

largeQ

您对使用无文档化的特性有何感想:>> builtin('_paren', magic(5), 3, 3)               %# M(3,3)ans =     13或用于单元阵列:>> builtin('_brace', num2cell(magic(5)), 3, 3)     %# C{3,3}ans =     13就像魔法:)最新情况:坏消息是,上面的黑客已经不起作用了R2015b!这很好,它是无文档的功能,我们不能依赖它作为支持的特性:)对于那些想知道在哪里可以找到这类东西的人,请查看文件夹。fullfile(matlabroot,'bin','registry')。有一堆XML文件列出了各种各样的好东西。请注意,直接调用其中一些函数很容易导致MATLAB会话崩溃。

繁华开满天机

至少在matlab 2013 a中您可以使用getfield比如:a=rand(5);getfield(a,{1,2}) % etc在(1,2)处得到元素
打开App,查看更多内容
随时随地看视频慕课网APP