Finding diag of two cells

Hello,
I have two cells(a and b) each with size 1x4 and each of them contains 2x1 matrix in each of its columns. I would like to find diag([a b]) to get a 2x2 matrix but it seems that diag() is not defined for cell. Can anybody tell me what I should do?

1 Comment

What 2x2 matrix are you looking for? diag([a b]) would provide a 2x1 matrix. Are you looking for [diag(a) diag(b)]? When asking questions, please provide sample inputs with an example of the expected result.

Sign in to comment.

 Accepted Answer

Maybe
cellfun(@diag,[a b],'uni',0)

4 Comments

Note that that returns 8 2x2 matrix cells. The OP only mentioned a result of a 2x1 matrix (perhaps it was meant to be 8 of these?) Gotta love clear requests.
Yeah, this method gives a 2x1 cell each column with size 2x2. But how can I have 2x2 matrix? Thank you in advance.
Look inside each cell of the ans from cellfun ;)
c=cellfun(@diag,[a b],'uni',0)
c{1} %compare this to what you are expecting from the diag function
Fantastic!!! Thanks.

Sign in to comment.

More Answers (1)

Does this work for you?
diag(cell2mat([a b]))
Note that the solution is the same as:
diag([a{1} a{2}])
To get the diag of both a and b, do this:
[diag(cell2mat(a)) diag(cell2mat(b))]
-Nathan

11 Comments

Thanks a lot. I need b, because a and b are different.
Does my answer work for you? If not, what are you looking to retrieve?
Your answer gives a 2x1 matrix. I need 2x2.
Your question asked for a 2x1 matrix. Please explain what you are looking for. Provide me example values for "a" and "b", and what you expect your result from "diag" to be. I wish I could read your mind.
Oh sorry, I meant 2x2 not 2x1. I edited the question. when I type a in the command window to see its value, it only gives me the size of each of its 4 columns but how can I see the value in each column?
One way: type a{:} and show me what it says. Another way: double click on "a" in your "Workspace" window.
a{1}=[ 0 0.0331]
a{2}=[0 0.0454]
a{3}=[0 0.512]
a{4}=[0 0]
I really appreciate your concern!
What is b supposed to be? What is the final solution to this problem supposed to be? You are leaving out important information. If I gave you a = {[1;2] [3;4] [5;6] [7;8]}; and b = {[.1;.2] [.3;.4] [.5;.6] [.7;.8]}; What would the result of your diag([a b]) be?
b={[0.5925 0] [0.5551 0] [0.5132 0] [0.4588 0]}. diag is not defined for cell. Anyway, thanks a lot. My problem is solved.
You are very unhelpful and wasted my time.
Jan
Jan on 26 Jul 2011
@Nathan: But without doubt Bahareh is very polite and thanked your repeatedly. It was obviously not his intentention to waste your time.

Sign in to comment.

Categories

Community Treasure Hunt

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

Start Hunting!