首页 文章

尝试将matlab矩阵分配给命名变量矩阵会产生'too many output arguments'错误

提问于
浏览
0

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语法是什么 .

1 回答

  • 0

    你差不多了 . 获取数字并将其转换为单元格数组中的单个单元格(通过 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
    

相关问题