Asked by Ilias Minas
on 11 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).

Thank you.

Answer by Guillaume
on 12 Jul 2019

Accepted Answer

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)));

Sign in to comment.

Answer by 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)

Ilias Minas
on 11 Jul 2019

Thank you for your reply.

I want to do this inside the cell without extracting all the values in the matrix because i want to track every cell.

Thank you again!

KSSV
on 11 Jul 2019

for i = 1:21

for j = 1:13

Ai = A{i,j} ;

% do what you want

end

end

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.

Opportunities for recent engineering grads.

Apply Today
## 2 Comments

## Guillaume (view profile)

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/471253-keep-positive-real-values-from-a-cell-inside-a-matrix#comment_723942

## Ilias Minas (view profile)

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/471253-keep-positive-real-values-from-a-cell-inside-a-matrix#comment_723951

Sign in to comment.