Keep positive real values from a cell inside a matrix

5 views (last 30 days)
Ilias Minas
Ilias Minas on 11 Jul 2019
Answered: Guillaume on 12 Jul 2019
Hi,
I have a matrix 21x13. Inside every cell there are 26 complex values.
I want to keep only the real positive parts of those complex values and plot a 3d graph having in one axis the real positive values, in the other axis the number of matrix rows (1-21)and on the third axis the number of matrix columns(1-13).Capture.JPG
Thank you.
  2 Comments
Ilias Minas
Ilias Minas on 12 Jul 2019
Hi Guillauame,
Thank you for your comment.
X and Y will be from 1 to 21 and 1 to 13 respectively. In Z axis i want to have the positive real values for each case.
So want to create a 3d scatter with the positive real values of every cell in Z axis.
For example if in cell (3,2) have 2 positive real values, in the scatter will appear as a two points in Z axis at X=3 and Y=2 point.
I want to scatter all the positive real values of every cell/
Thank you again.

Sign in to comment.

Accepted Answer

Guillaume
Guillaume on 12 Jul 2019
I want to scatter all the positive real values of every cell
In that case, I would convert your cell array to a 3D matrix. As I commented, it's much easier to work with. It's strange that the first row of your cell array has one less element that the others, but we can just pad the shorter cells with NaN.
%input: c, a MxN cell array of P(m,n)x1 complex vectors
maxlength = max(cellfun(@numel, c(:))); %find the length of the largest cell
permutedpadded = cellfun(@(m) permute([m; nan(numel(m) - maxlength)], [3, 2, 1])); %pad all cells so they're the same size. At the same time move the rows to the 3rd dimension
asmatrix = cell2mat(permutedpadded); %and convert into a MxNxmaxP matrix
%now plotting is trivial:
toplot = real(asmatrix) >= 0; %only want the element whose real positive parts
[x, y, ~] = ndgrid(1:size(asmatrix, 1), 1:size(asmatrix, 2), 1:size(asmatrix, 3)); %create array of X, Y coordinates the same size as the matrix
scatter3(x(toplot), y(toplot), real(asmatrix(toplot)));

More Answers (1)

KSSV
KSSV on 11 Jul 2019
Let A be your cell.
Convert cells into matrix using:
A = cell2mat(A) ;
Pick the real parts of A using:
A = real(A) ;
Pick the posititve reals using:
A(A<0) = NaN ;
surf(A)
  3 Comments
Ilias Minas
Ilias Minas on 12 Jul 2019
I tried this but it gives me only the last value of the for loop.
Can i do it for all the cells separetely?

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!