2016-09-29 121 views
0

我有一個1×5結構數組稱爲Game兩個領域,即結構數組分配

Game(5) = struct(Points, Scorers); 

現在,我也有一個單元陣列(5×2單元陣列)(進口從xlsread - 所以它的所有細胞數組形式)。

pts = [1 2;3 4;5 6;7 8;9 10]; 

我應該如何去在Game,分別給了pts每行,每5層結構的?

例如:Game(3).Points應該是pts(它是[5 6])的行3

Game(2).Points應該是[3 4]Game(1).Points將爲[1 2]

+0

xlsread的默認行爲是以矩陣形式返回數值數據。你是如何得到一個單元陣列的? – khonegger

+0

file ='abc.xlsx'; [pts pts pts] = xlsread(file)其中pts是一個5x2單元(matlab工作區)。我的實際導入單元格數組有num&txt。在我上面的問題中,我從1:10開始構建了一個非常簡單的5x2單元。 – Agnel

+0

哦,這是你的問題。在Matlab中,要求函數返回'[pts pts pts]'而不是'[a,b,c]'將順序覆蓋返回變量的賦值,只留下輸出的'c'部分。在這種情況下,第三個輸出'c'被格式化爲單元陣列。只需使用'pts = xlsread(file)'來獲取矩陣形式的數字數據。我將在下面給出一個關於如何把它放入結構的答案。 – khonegger

回答

0

如果您的工作表被組織成使得行對應於觀察值並且列對應於變量 - 例如,點(數字)和得分(字符串) - 你可以使用將數據導入Matlab的:

[pts, scr] = xlsread(file); 

然後就可以簡單地讀出的矩陣pts和單元陣列scr到結構陣列的每個場:

Game = struct('Points', num2cell(pts,2), 'Scorers', scr); 

這利用struct()的內置功能將輸出尺寸與其輸入相匹配,從而避免使用for循環將導入的值迭代分配給字段。

+0

這工作!後來我只需要將列單元格中的點重塑爲行(水平)單元格,以便與結構「遊戲」兼容。我也不知道num2cell中暗淡的'2'是怎樣完成的,但沒關係。 – Agnel