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 个评论

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.

请先登录,再进行评论。

 采纳的回答

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

4 个评论

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.

请先登录,再进行评论。

更多回答(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 个评论

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.
@Nathan: But without doubt Bahareh is very polite and thanked your repeatedly. It was obviously not his intentention to waste your time.

请先登录,再进行评论。

类别

在 帮助中心 和 File Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by