2014-10-26 72 views
1

我在Matlab中有一個相當簡單的問題。我想複製n個結構數組(sumRT.P)到一個矩陣(m)。在C,我只想用一個for循環,像這樣:Matlab - 沒有For循環的複製結構數組

for i = 1:n  
    m(i) = sumRT(i).P; 
end 

但我敢打賭,有一個簡單的複製在Matlab中的數組的方式(這是語言的權利整點?)。我嘗試這樣做:

m = sumRT(1:n).P; 

但這只是拷貝sumRT.P的第一個項目到m,導致1×1矩陣。請注意,如果我鍵入sumRT(2).P例如,我可以看到第二個項目。相同的任何數字高達n。爲什麼這是錯的,我該如何解決?

回答

2

這取決於你結構陣列中的數據的類型。如果他們是不同類型的變量,或者如果它們的大小相同的變量在不同尺寸的陣列,那麼你不能把它們放到一個數組,但你可以讓他們進入細胞:

m={sumRT(1:n).P} 

和細胞很容易處理,所以這不應該是一個大問題。

如果他們都標數值,您可以創建一個矩陣:

m=cell2mat({sumRT(1:n).P}) 
+0

太棒了!使用你的例子,這是我的問題的解決方案:m = cell2mat({sumRT(1:n).P});實際上我並不完全清楚某些結構數組如何變成單元格。這在我的Matlab生活中造成了一些問題。有什麼建議?我有一本關於Matlab的書 - 但它不是很全面。有沒有一個很好的Matlab「聖經」(例如,像Schildt的C手冊)? – Nick 2014-10-26 23:27:38

+0

太棒了!無論如何,我確實在我的答案中混淆了符號,看起來像你已經完成了。 – David 2014-10-26 23:31:13

0

嘗試以下方法:

m = squeeze(cell2mat(struct2cell(sumRT(1:n)))); 

此結構體數組轉換爲單元陣列,然後到一個(數字)陣列,然後通過單remoiving尺寸擠壓它。

實施例:

>> sumRT(1).P = 10; sumRT(2).P = 20; sumRT(3).P = 30; 
>> n = 2; %// copy first two elements only 
>> m = squeeze(cell2mat(struct2cell(sumRT(1:n)))) 
m = 
    10 
    20 
+0

我收到以下錯誤此代碼: 錯誤使用cell2mat(45行) 輸入單元陣列中的所有內容必須具有相同的數據類型。 – Nick 2014-10-26 18:42:14

+0

所以,我試着編輯你的代碼:m4 = squeeze(cell2mat(struct2cell(sumRT(1:n).P))) 我得到了這個錯誤信息。 類型爲'double'的輸入參數的未定義函數'struct2cell'。 – Nick 2014-10-26 18:44:09

+0

你還沒有告訴我們在你的情況下'sumRT(1).P','sumRT(2).P'的內容。我認爲他們是數字;在這種情況下,我的代碼確實有效(請參閱我的示例) – 2014-10-26 18:47:58