ループまたはarrayfunを使用して、空の配列要素を特定します。
empty_elems = arrayfun(@(s) isempty(s.x) & isempty(s.y),A.B)
戻り値:[0 1 0]
また
empty_elems = arrayfun(@(s) all(structfun(@isempty,s)), A.B);
これは、すべてのフィールドが空かどうかをチェックします ( allの代わりにanyを使用して、すべての代わりに空の要素があるかどうかをチェックします)。
次に、論理インデックスを使用してそれらを削除します。
A.B(empty_elems) = [];
コメントであなたの問題に対する完全な解決策:
% find array elements that have all fields empty:
empty_elems = arrayfun(@(s) all(structfun(@isempty,s)), A.B);
% copy non-empty elements to a new array `C`:
C = A.B(~empty_elems);
% find elements of C that have y field >3
gt3_elems = arrayfun(@(s) s.y<3,C);
% delete those form C:
C(gt3_elems) = [];
このコードを段階的に実行し、中間変数を分析して何が起こっているのかを理解してください。それはかなり明確なはずです。