Logical indexing 3D array to get a 2D slice
    3 views (last 30 days)
  
       Show older comments
    
    Yi-xiao Liu
 on 12 Mar 2021
  
    
    
    
    
    Answered: Walter Roberson
      
      
 on 12 Mar 2021
            I have a piece of code that calculates potential for 3D space. Now I want to extract the potential at the YOZ plane:
[X,Y,Z]=meshgrid(-500:spacing:500);
V= some calculations;
V0=V(X==0);
The problem is that V0 is a 1D vector instead of a 2D matrix. How do I correctly extract the slice?
0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 12 Mar 2021
        You cannot. When you use a single parameter logical vector to index an array, the result is always a vector. 
In limited circumstances you can reshape() the vector.
I suggest something more like
marginals = -500:spacing:500;
[X,Y,Z] = meshgrid(marginals);
V= some calculations;
xtarget = 0;
[~, xidx] = min(abs(marginals - xtarget));
V0 = permute(V(xidx, :, :), [2 3 1]);  %safer than squeeze()
0 Comments
More Answers (0)
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!
