2014-09-10 34 views
0

我编写了一个代码,它将矩阵中的非数字值替换为某个数字。 现在,为了测试它,我想允许MATLAB接受非数字条目。在MATLAB中允许矩阵中的非数字条目

我的代码开始与提示: matrix_input = input('Please enter the matrix: x=');

如果我输入类似[1,2,3; 4,5 ,?],MATLAB给出一个错误:非平衡或意外的括号或支架。由于所有括号似乎均衡,我认为这是由于非数字输入。是否有可能让MATLAB允许非数字输入?

+1

在那里使用'NaN'来代替那些非数字条目? – Divakar 2014-09-10 11:20:36

+0

@Divakar,我已经有了一个编码替换的代码。我的问题是我无法在非数字输入的矩阵上测试它。我也不知道用什么字符来测试我的代码性能:或许是'?'或者可能是其他东西 – user3349993 2014-09-10 11:23:58

+0

尝试使用单元而不是矩阵。你可以把任何东西放在一个单元格中。 ''c = {1,2,3; 4,5,'?'}''。从那里你可以做替换,并用''m = cell2mat(c)''得到一个矩阵。 – Nras 2014-09-10 11:26:17

回答

4

您需要一个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包含该值。但是,我无法想象一个简洁的方法来在一分钟内完成更换。

+0

您可以添加结构数组作为可能的解决方案。结构通常比细胞表现更好。 – sobek 2014-09-10 11:47:19

+0

@sobek你确定吗? – excaza 2014-09-10 12:06:02

+0

不确定关于数组的结构,但我确信单元对比常见结构有明显的性能劣势。 – sobek 2014-09-10 12:25:06