array dimensions equivalence check?

15 visualizaciones (últimos 30 días)
Walter Roberson
Walter Roberson el 4 de En. de 2012
Editada: Bruno Luong el 23 de Abr. de 2022
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 comentarios
Paulo Abelha
Paulo Abelha el 21 de Sept. de 2016
Editada: Walter Roberson el 21 de Sept. de 2016
Hello Walter,
I have implemented a function that might help you:
Best regards,
Bruno Luong
Bruno Luong el 23 de Abr. de 2022
Editada: Bruno Luong el 23 de Abr. de 2022
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
X = 0.6365

Iniciar sesión para comentar.

Respuesta aceptada

David Young
David Young el 4 de En. de 2012
One alternative:
isequal(size(A), size(B)) || (isvector(A) && isvector(B) && numel(A) == numel(B))
  3 comentarios
Adam Wyatt
Adam Wyatt el 18 de Nov. de 2021
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)))
Ahmed
Ahmed el 23 de Abr. de 2022
This seems not working for 3-D arrays or higher. Therefore, I implemented a more general function below.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by