2013-05-06 36 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