我有一个描述如下的单元格:
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
如何顺便检查一下?
答案 0 :(得分:1)
来自Matlab帮助:
如果SIZE(M)返回[m n],则ismatrix(M)返回逻辑1(真) 非负整数值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
答案 1 :(得分: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*。