2017-01-16 126 views
1

我描述为以下细胞:如何检查,如果单元格的元素包含矩阵

mixed_values = {'jim', 89, [5 2 1; 1 2 3]}; 
    mixed_values{1}  
    mixed_values{2} 
    mixed_values{3} 

我环路它:

for k=1:length(mixed_values) 
    curstate=mixed_values{k}; 

% Check for the [5 2 1; 1 2 3] 
if ismatrix(curstate) 
    disp('yes'); 

else 
    disp('no') 
end 
end 

但它的矩阵多次创立。

yes 
yes 
yes 

如何检查它的方式?

回答

1

从MATLAB帮助:

ismatrix(M)返回逻辑1(真),如果SIZE(M)返回[MN]与 非负整数值m和n,和逻辑0(假)否则

所以我检查size(curstate)

1 3 % 3 character string array 
1 1 % of course you can do size of a single elements 
2 3 

所以我修改您的代码

for k=1:length(mixed_values) 
    curstate=mixed_values{k}; 

    % Check for the [5 2 1; 1 2 3] 
    if (size(curstate,1)) > 1 && (size(curstate,2)) > 1 
     disp('yes'); 
     disp(size(curstate)); 

    else 
     disp('no') 
    end 
end 
+0

非常感谢你,我正在为这个问题苦苦挣扎,我甚至试图通过检查m * n个事情找到一种方法,但无法解决它。 –

+0

@ Hey-men-whatsup不客气! – marcoresk

1

这实际上取决于你定义的矩阵是什么。在MathWorks的案例中,他们决定矩阵将是有效大小的东西,这当然是正确的。请注意,即使是标量也是矩阵,大小为1x1。你甚至可以有一个字符矩阵。 A = ['a' 'b';'c' 'd'];。我收集你的情况,你想要一个矩阵是至少2维的数字收集。我会这样解决:

function result = TestForMatrix(m) 
    t1 = isnumeric(m); 
    t2 = ~isvector(m); 
    result = all([t1 t2]); 
end 

使用它就好像它是ismatrix

if (TestForMatrix(curstate)) 
    disp('yes'); 
else 
    .... 

这种工作方式是测试数字数字将消除字符串。第二个测试将消除矢量和标量。当你发现更多的东西包括或消除你添加这些测试。例如,假设你想允许单元格。 t3 = iscell(m); result = all([t1 t2 t3]);可以在Matlab对象上完成很多逻辑测试,请参见Matlab is*

+0

谢谢,以后肯定会对我有利,再次感谢 –

相关问题