2012-08-30 67 views
2

我在Matlab中有1x280結構。爲了讓我使用這些值,我將其更改爲struct2cell數組。無法將值存儲到數組MATLAB

的如何280個長相之間的結構中的一個是下面的例子:

showlines = struct(lines); 
cellData = struct2cell(showlines); 


cellData{1,1}(1) 
    = 29 

然而,如果使用這樣的:

Field  Value    Min  Max 

point1  [29,469]   29  469 
point2  [42,469]   42  469 
------------------------------------------- 

使用下面的代碼改變到單元陣列後:

cellData{1,1:280}(1); 

存在錯誤

Error:: bad cell reference operation 

我需要所有的在每個280層結構的point1x值保持到一個數組,以找出他們中的point1最大X值。任何想法如何做到這一點?

非常感謝您提前。

回答

1

雖然沒有直接回答你的問題,你可能有興趣知道,

%# some example data 
S(1).point1 = [29 469]; 
S(1).point2 = [42 469]; 

S(2).point1 = [30 470]; 
S(2).point2 = [43 470]; 

... 

S(280).point1 = [130 870]; 
S(280).point2 = [243 970]; 

%# transform to regular array 
pt1 = reshape([S.point1],[],2).'; 
pt2 = reshape([S.point2],[],2).'; 

將導致

pt1 = [29 469  pt2 = [42 469 
     30 470    43 470 
     ...     ... 
     130 870];   243 970]; 

,使您能夠做這樣的事情

>> pt1(:, 2) 
ans = 
    469 
    470 
    .. 
    870 

>> min(pt1(:,1)) 
ans = 
    29 

這能解決你的問題嗎?

給任何路人:什麼是非標量[S.field]的符號structs叫?它甚至有名字嗎?涉及這種技術的問題經常彈出,如果我知道它的名稱,這將有所幫助,因此我可以在答案中發佈指向手冊頁的鏈接...

+0

是的,那解決了我的問題,如果我只有S( 1)到S(3)左右。但在我的情況下,有280個'S',因爲我的結構有280個。我該如何去填充S(3)到S(280)point1和point2 automatticaly?謝謝 – Melvyn

+0

@Melvyn我的回答只是一個例子。即使'S'包含十億個值,相同的行(即'[S.point1]')也可以很好地工作。你有沒有在自己的結構上嘗試以上? –

+0

對不起,我也要將「S」改成我自己的單元格陣列名稱? I.E在struct2cell之後,我將單元格數組重命名爲「cellData」。這個數組有280個點1和點2。那麼我寫[cellData.point1]? – Melvyn