【问题标题】:attempt to assign matlab matrix to an matrix of named variables produces 'too many output arguments' error尝试将 matlab 矩阵分配给命名变量矩阵会产生“输出参数过多”错误
【发布时间】:2014-10-04 03:14:53
【问题描述】:

matlab 函数 sscanf 返回一个可变大小的矩阵(或者可能是一个元胞数组?),它可以分配给一个变量名矩阵

>> clear all ;
line = '1 2' ;
[a, sz] = sscanf( line, '%d %d' ) ;

看来输出矩阵a是列矩阵,可以转置形成1x2矩阵:

b = a' ;

我希望能够将它分配给变量名矩阵,就像我在前面的 sscanf 调用中所做的那样。我想我可以做到:

[c,d] = b ;

但这给了我错误:

Too many output arguments.

从答案https://stackoverflow.com/a/23800927/189270 看来,我可以通过将矩阵a 转换为元胞数组来做到这一点,但是,我似乎无法为此找出正确的语法:

>> num2cell(a)

ans =

    [1]
    [2]

>> [c,d] = num2cell(a)
Error using num2cell
Too many output arguments.

>> [c,d] = num2cell(a')
Error using num2cell
Too many output arguments.

>> [c ; d] = num2cell(a)
 [c ; d] = num2cell(a)
  |

我可以通过将字段bc 一次分配一个索引到矩阵a 来解决问题。但是,我想这是一种常见的批量变量赋值类型(例如,我在 Mathematica 中这样做),所以我想了解我上面的尝试有什么问题,以及正确的 matlab 语法是什么。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    你几乎说对了。获取数字并将它们转换为元胞数组中的单个元胞后(通过num2cell),使用deal 将元胞数组中的每个元素分配给相应的变量。因此:

    %// Your code
    line = '1 2' ;
    [a, sz] = sscanf( line, '%d %d' ) ;
    
    %// New code!
    b = num2cell(a);
    [c,d] = deal(b{:});
    

    这是我在deal之后得到的:

    c =
    
         1
    
    
    d =
    
         2
    

    【讨论】:

    • 谢谢。从交易文档(示例 3)中,看起来 [c,d] = b{:} 也有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多