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 件のコメント

Nathan Greco
Nathan Greco 2011 年 7 月 25 日
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.

サインインしてコメントする。

 採用された回答

Paulo Silva
Paulo Silva 2011 年 7 月 25 日

0 投票

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

4 件のコメント

Nathan Greco
Nathan Greco 2011 年 7 月 25 日
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.
Bahareh
Bahareh 2011 年 7 月 25 日
Yeah, this method gives a 2x1 cell each column with size 2x2. But how can I have 2x2 matrix? Thank you in advance.
Paulo Silva
Paulo Silva 2011 年 7 月 25 日
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
Bahareh
Bahareh 2011 年 7 月 25 日
Fantastic!!! Thanks.

サインインしてコメントする。

その他の回答 (1 件)

Nathan Greco
Nathan Greco 2011 年 7 月 25 日

0 投票

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 件のコメント

Bahareh
Bahareh 2011 年 7 月 25 日
Thanks a lot. I need b, because a and b are different.
Nathan Greco
Nathan Greco 2011 年 7 月 25 日
Does my answer work for you? If not, what are you looking to retrieve?
Bahareh
Bahareh 2011 年 7 月 25 日
Your answer gives a 2x1 matrix. I need 2x2.
Nathan Greco
Nathan Greco 2011 年 7 月 25 日
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.
Bahareh
Bahareh 2011 年 7 月 25 日
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?
Nathan Greco
Nathan Greco 2011 年 7 月 25 日
One way: type a{:} and show me what it says. Another way: double click on "a" in your "Workspace" window.
Bahareh
Bahareh 2011 年 7 月 26 日
a{1}=[ 0 0.0331]
a{2}=[0 0.0454]
a{3}=[0 0.512]
a{4}=[0 0]
I really appreciate your concern!
Nathan Greco
Nathan Greco 2011 年 7 月 26 日
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?
Bahareh
Bahareh 2011 年 7 月 26 日
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.
Nathan Greco
Nathan Greco 2011 年 7 月 26 日
You are very unhelpful and wasted my time.
Jan
Jan 2011 年 7 月 26 日
@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