2016-11-14 84 views
0

我有1个字段的matlab数据1x617 stuct,每行有4个字段的1x1结构。我如何提取数据以获得617数据的第4个字段,第4个字段是nx1的两倍。由于在MATLAB中提取结构文件的第四个字段

+1

这是很难理解在所有结构你可以尝试写作树/文件夹结构吗?这甚至可以帮助你更好地理解问题。 – mpaskov

+0

,我有数据为 'diffAnalysisRes1' 与1场1x617结构中,每一行是 'diffAnalysisRes1(1).fullDim' 到 'diffAnalysisRes1(617).fullDim' 1x1struct与4个字段。我想收集第4个字段的好名字是'diffAnalysisRes1(1).fullDim.normDiffCoef'到'diffAnalysisRes1(617).fullDim.normDiffCoef'。我希望有一个收集所有的617个数据由于第四场命令 –

回答

0

根据您的变量结构,可有时通过简单地索引引用它解决。然而,要收集结构变量的数组中的一个特定字段数据的情况下,我会建议Matlab的FileExchange

这里使用structval是链接:

Struct 2 array or cell for desiginated fieldname

假设您的变量看起来像这样

for idx = 1:617 
    b.a = ones(1,1)*idx; 
    b.b = ones(2,1)*idx; 
    b.c = ones(3,1)*idx; 
    b.d = ones(4,1)*idx; 
    s(1,idx).a = b; 
end 

上面的代码建立一个1x617 stuct用1场,并且每行具有4个字段的1x1结构。在这里我假设每行中第4个字段的名称是相同的。

现在使用structval

r = structval(s,'d'); 

结果是1x617单元阵列。如果你碰巧各项指标(如NX1阵列)在有该字段相同的大小,然后用

r = structval(s,'d','collapse',true); 

返回一个nx617阵列

+0

嗨史蒂芬,我已经试过MSD = stuctval(diffAnalysisRes1,diffAnalysisRes1.fullDim.normDiffCoef) 但未定义matlab的函数或变量“structval”。我的数据是1x617结构1字段(文件名是“diffAnalysisRes1”)每行都有1x1结构与4个字段我想收集617(文件名“diffAnalysis1(1).fullDim.normDiffCoef”的所有第四个数据到“diffAnalysis1( 617).fullDim.normDiffCoef“ –

+0

'structval'不是一个内置函数,它是Matlab的File Exchange上的一个免费的分布式函数,您必须首先从文件exchagne下载'structval'并将其放在工作目录中。你的第二个参数传递给函数必须是一个字符串变量(见我的例子)。所以它可能看起来像** structval(diffAnalysisRes1,“normDiffCoef”)** –

+0

太感谢你了它的工作原理 –