我有一个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),我该如何进行此尺寸验证?
谢谢!
答案 0 :(得分:3)
您可以使用自己的函数获取结构的大小:
[nrows, ncols] = arrayfun(@(x) size(x.v), matrix)
现在您只需要确保nrows
和ncols
对于matrix.v
的所有情况都是相同的数字,这样您就可以了
samesize=length(unique(nrows))==1 && length(unique(ncols))==1;
答案 1 :(得分:1)
另一种选择,是try
和catch
错误,因为你只是期待这个错误,这不如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所以速度快它会更快(我想?)