array dimensions equivalence check?
15 ビュー (過去 30 日間)
古いコメントを表示
You would think I would know this by now, but I never had reason to program it before.
Is there a good idiom for efficiently checking that two arrays are the same size or are row and column vectors of the same length?
For example, this kind of check would be used to find out whether two arrays are assignment-compatible, or to find out if two arrays are compatible for plot() purposes.
The code I have come up with feels overly complicated:
szA = size(A);
szB = size(B);
if isequal(szA,szB) || ...
(sum(szA==1) == 1 && sum(szB==1) == 1 && ...
numel(szA)==2 && numel(szB)==2) && ...
prod(szA) == prod(szB))
Which is to say, the sizes can be identical, or they can both be 2 dimensional with exactly one of the dimensions of each being 1, and the number of elements the same between the two.
This kind of check must be programmed all over the place. Perhaps there is a utility routine that I overlooked?
2 件のコメント
Paulo Abelha
2016 年 9 月 21 日
編集済み: Walter Roberson
2016 年 9 月 21 日
Hello Walter,
I have implemented a function that might help you:
Best regards,
Bruno Luong
2022 年 4 月 23 日
編集済み: Bruno Luong
2022 年 4 月 23 日
Your test return false for
A = [];
B = zeros(1,0);
however plot works just fine
plot(A,B)
or Assignment
X = rand();
X(1,[])=X([],[]) % B on lhs, A on rhs
採用された回答
David Young
2012 年 1 月 4 日
One alternative:
isequal(size(A), size(B)) || (isvector(A) && isvector(B) && numel(A) == numel(B))
3 件のコメント
Adam Wyatt
2021 年 11 月 18 日
This will return true if A is a row vector and B is a column vector (or vice versa). If you care about that:
isequal(size(A), size(B)) || ( ...
((iscolumn(A) && iscolumn(B)) || (isrow(A) && isrow(B))) ...
&& isequal(numel(A), numel(B)))
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!