2012-03-18 163 views
1

我有一個簡單的結構問題。matlab:結構數據和多級索引

讓我們創建:

x(1).a(:, :) = magic(2); 
x(2).a(:, :) = magic(2)*2; 
x(3).a(:, :) = magic(2)*3; 

如何列出一個(1,1)從所有的X-ES?

我想做到這一點,如:

x(1, :).a(1,1) 

,但有一個錯誤「對於這種類型的多級索引所需的標量指標。」

如何處理它?我知道我可以做一個循環,但這可能是最糟糕的解決方案:) 謝謝!

回答

2

這不是最好的數據結構使用,如果這是你想要做的查詢,正是因爲這種索引不能直接完成。

然而,這裏是一個辦法,工作原理:

cellfun(@(X) X(1,1), {x.a}) 

語法{x.a}從「結構數組」到單元格數組轉換x。然後,我們使用cellfun將函數作爲映射應用於單元陣列。匿名函數@(X) X(1,1)需要一個參數X並返回X(1,1)

+0

謝謝。但是如果我想要f.ex怎麼辦? x(1,:)。a(:,1)? – Art 2012-03-21 04:09:21

2

你也可以得到你的數據是這樣的:

B = cat(3,x.a); 
out = reshape(B(1,1,:),1,[]); 

順便說一句,環不是邪惡。有時甚至比矢量化索引更快。嘗試了兩種方式,看看來講,你最適合:

  • 速度 - 使用分析器來檢查
  • 代碼清晰 - 取決於上下文。有時矢量化的代碼看起來更好,有時卻相反。