如何在Matlab中检查结构数组中的空字段并存储所有非空的向量?

Ald*_*hez 2 matlab is-empty

我有一个32x1 struct array.该数组的每个元素都有几个字段.我试图检查哪些元素是空的(完成),但后来我想创建一个包含所有非空元素的向量.

例如,我有struct array被叫satdata,我想看看该字段SVID是否为空,所以satdata(i).SVID.对于我的不同元素,SVID应该从1到32.但是如果有一个缺失的元素,那么它可以[1:4 6:10 11:32].所以我想创建一个列向量(对于这种情况)

[1;2;3;4;6;7;8;9;10;11;12;13;14;15;16;17;18;19...32].
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止:

for i = 1:32
    if isempty(satdata(i).SVID)
        continue
    else
    svid = satdata(i).SVID;
     svIdVec(i,:) = svid;
    end
end
Run Code Online (Sandbox Code Playgroud)

哪个正确检查空槽,但是当我创建向量时,我得到的东西看起来像svIdVec = [0,2,3,4...32].在这种情况下,只有第一个元素为空.因此,我想得到一个31x1矢量,如[2,3,4...32].

Gun*_*uyf 5

你不需要循环:

svIdVec = {satdata.SVID};
[svIdVec{~cellfun(@isempty,svIdVec)}]'; % select only the non-empty values
Run Code Online (Sandbox Code Playgroud)

如果SVID字段是向量并且您想要在矩阵中聚合它,则应使用以下内容(上面的代码用于标量不能用于处理向量):

svIdVec = {satdata.SVID}';
svid = ~cellfun(@isempty,svIdVec );
svIdVec = cell2mat(svIdVec(svid));
Run Code Online (Sandbox Code Playgroud)