How to expend 1 dim for array ?
    42 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    渲航
 el 12 de Jul. de 2023
  
    
    
    
    
    Comentada: Walter Roberson
      
      
 el 17 de Jul. de 2023
            I already have a vector  s , which size is 

Now want to change its size to  for another function that normally has an input size of 4x4x4xn (n >=1). I tried this command:
for another function that normally has an input size of 4x4x4xn (n >=1). I tried this command:
 for another function that normally has an input size of 4x4x4xn (n >=1). I tried this command:
for another function that normally has an input size of 4x4x4xn (n >=1). I tried this command:s_expend(:,:,:,1) = s
but I found that the size of s_expend is still  (Use command: size(s_expend))
 (Use command: size(s_expend))
 (Use command: size(s_expend))
 (Use command: size(s_expend))It seems that MATLAB ignores dimensions of size 1 that are the last dimension? How do I implement something like expend_dim in numpy or unsqueeze in Pytorch using Matlab?
1 comentario
  Stephen23
      
      
 el 12 de Jul. de 2023
				"It seems that MATLAB ignores dimensions of size 1 that are the last dimension?"
Not at all. If you check that dimension, you will find that it has size 1 (as do all infinite trailing dimensions):
A = rand(4,4,4);
size(A,4)
Respuesta aceptada
  Walter Roberson
      
      
 el 12 de Jul. de 2023
        
      Movida: Matt J
      
      
 el 12 de Jul. de 2023
  
      MATLAB does not exactly ignore trailing dimension of 1, but thinking of it that way is "close enough" for most work.
Every array in MATLAB is treated as having an indefinite number of trailing dimensions of size 1. A 4 x 4 x 4 array is treated the same as a 4 x 4 x 4 x 1 array or a 4 x 4 x 4 x 1 x 1 x 1 x 1 x 1 x 1 array. 
When MATLAB is storing the dimensions of an array internally, all singular (length 1) trailing dimensions are omitted from being explicitly stored, and the number of stored dimensions (ndims) for any array is always the minimum of 2 and "the last dimension number that is not 1". Trailing dimensions that are size 1 are "collapsed". 
If you look at an array and it is 4 x 4 x 4, ndims 3, and you need to check whether it is compatible with a 4 x 4 x 4 x n array, then when it makes sense to do so, MATLAB automatically internally replicates data to match. If you were, for example, adding a 4 x 4 x 4 to a 4 x 4 x 4 x 7 then MATLAB would do the internal equivalent of repmat(The3DArray, 1, 1, 1, 7) and add that to the 4 x 4 x 4 x 7.  If you were doing cat(4, The3DArray, The4DArray) then that would work without difficulty and would give you a 4D array .
There are cases where you do need exactly the same size of array; in such a case you can explicitly test isequal(size(TheFirstArray), size(TheSecondArray)) . But if you are checking for arithematic compatibility then ndims(TheFirstArray) <= ndims(TheSecondArray) 
0 comentarios
Más respuestas (2)
  Kanishk Singhal
      
 el 12 de Jul. de 2023
        Yeah, as you said MATLAB ignnores dimension of size 1, but if you do,
A = [1 2;3 4];
size(A,3)
You'll get 1 which I think is what you want. If you want to loop in the function you can use size to find the dimension you need.
Hope it helps.
1 comentario
  Steven Lord
    
      
 el 12 de Jul. de 2023
				In release R2019b we enhanced the size function to accept a vector of values for the dimension input. So if that's all the data you need, no loop is required.
A = ones(4, 5, 6);
sz = size(A, 1:10) % Size of A in dimensions 1 through 10
  渲航
 el 17 de Jul. de 2023
        1 comentario
  Walter Roberson
      
      
 el 17 de Jul. de 2023
				isequal(size(Tensor, 1:3), [4 4 4]) & ndims(Tensor) <= 4
should work for the original arrangement
Ver también
Categorías
				Más información sobre Logical en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!







