我有32x1 struct array
。该数组的每个元素都有几个字段。我试图检查哪些元素是空的(完成),但后来我想创建一个包含所有非空元素的向量。
例如,我有一个名为struct array
的{{1}},我想看看字段satdata
是否为空,所以SVID
。对于我的不同元素,SVID应该从1到32。但是如果缺少元素,那么它可以是satdata(i).SVID
。所以我想创建一个列向量(对于这种情况)
[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].
哪个正确检查空插槽,但是当我创建向量时,我得到的内容看起来像for i = 1:32
if isempty(satdata(i).SVID)
continue
else
svid = satdata(i).SVID;
svIdVec(i,:) = svid;
end
end
。在这种情况下,只有第一个元素为空。因此,我想获得一个svIdVec = [0,2,3,4...32]
向量,例如31x1
。
答案 0 :(得分:5)
您不需要循环:
svIdVec = {satdata.SVID};
[svIdVec{~cellfun(@isempty,svIdVec)}]'; % select only the non-empty values
如果SVID字段是一个向量,并且您想要在矩阵中聚合它,则应使用以下内容(上面的代码用于标量不能用于处理向量):
svIdVec = {satdata.SVID}';
svid = ~cellfun(@isempty,svIdVec );
svIdVec = cell2mat(svIdVec(svid));
答案 1 :(得分:1)
您的问题在字符串
中svIdVec(i,:) = svid;
你应该用当前的svIdVec替换我。
可能的解决方案是
svIdVec = [];
for i = 1:32
if isempty(satdata(i).SVID)
continue
else
svid = satdata(i).SVID;
svIdVec = [svIdVec, svid];
end
end