How to use cat properly

40 visualizaciones (últimos 30 días)
user20912
user20912 el 29 de Mzo. de 2022
Comentada: Matt J el 29 de Mzo. de 2022
Hi
I'm confused about the properly way of using cat and the help isn't being so helpful. Let's say that I have a variable var1
Name size
var1 326x377x31x9.
I want to rearrange "passing down" the last dimension. I know that this words make no sense in a matrix context, but please bear with me.
So the new size would be (31x9=279)
Name size
var2 326x377x279
I'm currently using
var2 = cat(XX,var1(:,:,:));
If I use XX as 1,2,3 or 4, I get the same result, this is, the size I want. But, what does it mean in this context if I use XX as 1, 2, 3 or 4?
Thanks.

Respuesta aceptada

Matt J
Matt J el 29 de Mzo. de 2022
Editada: Matt J el 29 de Mzo. de 2022
The cat command is not causing the change that you are seeing in the array shape. What's causing it is the fact that you are indexing with 3 subscripts (:,:,:) instead of 4. Since the cat command only receives 2 arguments it simply returns the 2nd argument unchanged. You could have equivalently generated var2 without cat as follows:
var1=rand(326,377,31,9);
var2=var1(:,:,:);
whos var1 var2
Name Size Bytes Class Attributes var1 326x377x31x9 274317264 double var2 326x377x279 274317264 double
To do something meaingful with cat(), you must give it 3 or more input arguments, e.g.,
var1=eye(3); var2=rand(3);
cat(1, var1,var2) %cat along dimension 1
ans = 6×3
1.0000 0 0 0 1.0000 0 0 0 1.0000 0.0992 0.6564 0.8313 0.5780 0.2544 0.3718 0.1110 0.8576 0.2186
cat(2,var1,var2) %cat along dimension 2
ans = 3×6
1.0000 0 0 0.0992 0.6564 0.8313 0 1.0000 0 0.5780 0.2544 0.3718 0 0 1.0000 0.1110 0.8576 0.2186
cat(3,var1,var2) %cat along dimension 3
ans =
ans(:,:,1) = 1 0 0 0 1 0 0 0 1 ans(:,:,2) = 0.0992 0.6564 0.8313 0.5780 0.2544 0.3718 0.1110 0.8576 0.2186
  5 comentarios
user20912
user20912 el 29 de Mzo. de 2022
Dear Matt, when you say
or, more generally, you could have used reshape() as Steven mentioned.
do you mean that
var2=var1(:,:,:);
is the same as the following?
[x,y,~] = size(var1)
var2 = reshape(var1,x,y,[])
Because my results are not changing.
Thanks in advance
Matt J
Matt J el 29 de Mzo. de 2022
Yes, it's the same.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2017a

Community Treasure Hunt

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

Start Hunting!

Translated by