我编写了一个代码,它将矩阵中的非数字值替换为某个数字。 现在,为了测试它,我想允许MATLAB接受非数字条目。在MATLAB中允许矩阵中的非数字条目
我的代码开始与提示: matrix_input = input('Please enter the matrix: x=');
如果我输入类似[1,2,3; 4,5 ,?],MATLAB给出一个错误:非平衡或意外的括号或支架。由于所有括号似乎均衡,我认为这是由于非数字输入。是否有可能让MATLAB允许非数字输入?
我编写了一个代码,它将矩阵中的非数字值替换为某个数字。 现在,为了测试它,我想允许MATLAB接受非数字条目。在MATLAB中允许矩阵中的非数字条目
我的代码开始与提示: matrix_input = input('Please enter the matrix: x=');
如果我输入类似[1,2,3; 4,5 ,?],MATLAB给出一个错误:非平衡或意外的括号或支架。由于所有括号似乎均衡,我认为这是由于非数字输入。是否有可能让MATLAB允许非数字输入?
您需要一个cell array。单元阵列的每个单元可以容纳任何类型的数据。大括号用于创建一个单元阵列像这样:
cell_array = {1, 2, 3; '4', '?', 6};
如果使用正则括号中的单元阵列访问一个元素你会得到一个细胞。如果你使用花括号,你会得到单元格的内容。正是这种差异往往会让人们用细胞阵列赶出来。
cell_array(1) % Returns a 1x1 cell containing the value 1.
cell_array{1} % Returns 1
编辑
出于好奇,什么是您使用的代码替换非数值?对于一个单元阵列,我想出了机智如下:
idx = cellfun(@isnumeric, cell_array);
cell_array(~idx) = {NaN};
matrix = cell2mat(cell_array);
正如在评论中提到,你也可以使用结构数组:
struct_array = struct('v', {1, 2, 3; '4', '?', 6});
这将创建结构数组,其中外地v
包含该值。但是,我无法想象一个简洁的方法来在一分钟内完成更换。
在那里使用'NaN'来代替那些非数字条目? – Divakar 2014-09-10 11:20:36
@Divakar,我已经有了一个编码替换的代码。我的问题是我无法在非数字输入的矩阵上测试它。我也不知道用什么字符来测试我的代码性能:或许是'?'或者可能是其他东西 – user3349993 2014-09-10 11:23:58
尝试使用单元而不是矩阵。你可以把任何东西放在一个单元格中。 ''c = {1,2,3; 4,5,'?'}''。从那里你可以做替换,并用''m = cell2mat(c)''得到一个矩阵。 – Nras 2014-09-10 11:26:17