How to convert matrices of different sizes in a for loop into a single column vector?
    6 views (last 30 days)
  
       Show older comments
    
A = imread('Ish.JPG');
A = im2single(squeeze(mean(A,3)));
A = im2double(A);
[pyrRef,pind] = buildLpyr(A,'auto');
nLevels = 7;
kernelx = [0.0, 0.0, 0.0; 0.5, 0.0, -0.5; 0.0, 0.0, 0.0];
kernely = [0.0, 0.5, 0.0; 0.0, 0.0, 0.0; 0.0, -0.5, 0.0];
for k = 1:nLevels
    subband = pyrBand(pyrRef, pind, k);
    rx(k) = conv2(subband(k),kernelx);
    ry(k) = conv2(subband(k),kernely);
    amp = sqrt(subband.^2 + rx(k).^2 + ry(k).^2);
    Phase = acos(subband./amp);
end
Here, the value of "Phase" is a matrix with varying dimension at each iteration of 'k'. How do I save all the values in these k matrices into a single coloumn vector?
2 Comments
  Jiri Hajek
      
 on 5 Dec 2022
				
      Edited: Jiri Hajek
      
 on 5 Dec 2022
  
			Hi, you can make column vector from a matrix by using linear indexing 
columnVector = Array(:);
And if by "save all" you mean to concatenate these vectors, then its possible simply by using brackets:
concatenatedVectors = [firstVector; secondVector];
Answers (3)
  Jan
      
      
 on 5 Dec 2022
        ...
PhaseC = cell(1, nLevels);
for k = 1:nLevels
    ...
    PhaseC{k} = acos(subband./amp);
end
Phase = cat(2, PhaseC{:});  % Maybe cat(1, ...
0 Comments
  MFK
      
 on 16 Jan 2023
        for k = 1:nLevels
    ...
    Phase = acos(subband./amp);
    re_shaped_Phas{k,1}=reshape(Phase,1,[]);
end
0 Comments
  Bruno Luong
      
      
 on 16 Jan 2023
        ...
PhaseC = cell(1, nLevels);
for k = 1:nLevels
    ...
    Phase = acos(subband./amp);
    PhaseC{k} = Phase(:);
end
Phase = cat(1, PhaseC{:}); 
0 Comments
See Also
Categories
				Find more on Matrix Indexing in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



