2013-05-06 39 views
1

我有一個東西叫做allWords,這對於一些原因,我不得不指數隨大括號:類型如何在MATLAB/Octave中工作?

allWords{1} 
ans = 

    9x1 struct array containing the fields: 

    img 
    groundTruth 

在它是手寫字符九張圖像,如果我將它們賦值給一個變量:

a=allWords{1}(1).img 
b=allWords{1}(2).img 
c=allWords{1}(3).img 
d=allWords{1}(4).img 
e=allWords{1}(5).img 
f=allWords{1}(6).img 
g=allWords{1}(7).img 
h=allWords{1}(8).img 
i=allWords{1}(9).img 

做到這一點,然後我可以看到手寫的文字,因爲它是在它被切碎之前。

imshow([a b c d e f g h i]) 

這比我以前的版本更漂亮:

# the first word 
n=1 
l=length(allWords{n}) 
for i = 1:l, subplot(1,l,i); imshow(allWords{n}(i).img); end; 

這使不必要的空格在圖像之間。

然而,這是非常醜陋的,我如何概括它並簡化它?

這看起來顯而易見的事情,但waah waah,配不上該死的Matlab的:

imshow(allWords{1}.img) 

愚蠢堆。有沒有人有任何提示,以找出事物的類型,或找出什麼類型將魔法變成其他類型,什麼不會或如何血腥索引工作或任何形式的邏輯解釋爲什麼這種整個惡劣的混亂以這種方式結束?

回答

1

嘗試:

img = cat(2, allWords{1}(:).img); 
imshow(img) 

一些說明:

allWords是一個單元陣列。至於你所展示的,它至少包含一個元素。

第一個元素allWords{1}是大小爲9x1的結構數組(即每個元素都是結構的數組)。每個結構都有兩個字段imggroundTruth

現在,當您訪問allWords{1}.img時,將返回一個逗號分隔列表,該列表基本上擴展爲x1,x2,...。因此,我們可以將它們組合成一個矩陣,如[allWords{1}.img],假設尺寸是兼容的。

最終結果:

imshow([allWords{1}.img]) 
+0

真棒,謝謝!你能指點我一個教程或一組手指練習,這將使我能夠理解類型系統嗎?例如,我怎麼知道allWords {1} .img是一個'逗號分隔列表'?是否有類型(allWords {1} .img)? – 2013-05-06 22:31:50

+0

MATLAB文檔通常是一個很好的開始。逗號分隔列表本身不是一種類型。這裏是一個解釋他們的頁面:http://www.mathworks.com/help/matlab/matlab_prog/comma-separated-lists.html。另外這裏是專用於數據類型的部分:http://www.mathworks.com/help/matlab/data-types_data-types.html – Amro 2013-05-06 22:35:00