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)
|
我可以通过分配到字段b
,c
一次一个索引到矩阵a
来强制解决问题。但是,我想这是一种常见的批量变量赋值类型(例如我在Mathematica中这样做),所以我想了解上面的尝试有什么问题,以及正确的matlab语法是什么。
答案 0 :(得分: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