如何比较1xN结构数组中的矩阵维度

时间:2016-03-15 10:01:26

标签: arrays matlab data-structures

我有一个1xN结构数组,其中包含一个存储向量v的字段。通常,N> 2。

我使用arrayfun函数检查结构数组中所有N个元素的v个向量是否相同:

if  all(arrayfun(@isequal,matrix.v))

问题是我目前想要在调用上面的行之前检查所有v向量是否具有相同的大小。我不能使用arrayfun,因为它需要所有参数具有相同的维度。

当N = 2时,没有问题,因为我可以简单地做一些像

这样的事情
if length(matrix(1).v) == length(matrix(2).v)

但是,对于一般情况(N> 2),我该如何进行此尺寸验证?

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用自己的函数获取结构的大小:

[nrows, ncols] = arrayfun(@(x) size(x.v), matrix)

现在您只需要确保nrowsncols对于matrix.v的所有情况都是相同的数字,这样您就可以了

samesize=length(unique(nrows))==1 && length(unique(ncols))==1;

答案 1 :(得分:1)

另一种选择,是trycatch错误,因为你只是期待这个错误,这不如Ander的答案好,但它是另一种选择:< / p>

try
   all(arrayfun(@isequal,matrix.v))
catch exception  %//Same as if it throws an error
   %//...your statements...%//
   %//you could do something like ans = 1 since anw will equal 0 if all(arrayfun(@isequal,matrix.v)) is true
end

例如:

value = {[1,2,3];
[10, 20, 30];
[100,200,300,400]};
s = struct('f',value);
try
   all(arrayfun(@isequal,s.f))
catch exception
   ans=1
end

>> ans = 1

但是这并不关心异常是什么,所以如果你的代码被一个不同的错误打破,它仍然会继续为ans提供一个。一个优点是它只评估一次arrayfun:D所以速度快它会更快(我想?)