3
結構的邏輯索引可以說我有這樣的結構:與各種尺寸的字段
S.index = 1:10;
S.testMatrix = zeros(3,3,10);
for x = 1:10
S.testMatrix(:,:,x) = magic(3) + x;
end
S.other = reshape(0:39, 4, 10);
它包含1×10載體,3x3x10多頁陣列和4×10矩陣。現在說我只需要選擇對應的指數2和8
之間mask = S.index > 2 & S.index < 8;
structfun(@(x) x(mask), S, 'UniformOutput', 0);
首先這對於只有載體,這是非常合情合理的工作正常的條目。所以我想我所需要做的就是擴大我的面具。所以我做到了。
test = structfun(@(x) x(repmat(mask, size(x, ndims(x) - 1), 1)), S, 'UniformOutput',0);
展開的mask
對於矩陣而言是正確的,但不是多頁面陣列。 2D矩陣被平坦化爲一個矢量。
如果我去索引這些元素單獨我會做這樣的事情:
S2.index = S.index(mask);
S2.other = S.other(:,mask);
S2.testMatrix = S.testMatrix(:,:,mask);
我的使用情況是幾百結構各有20+場。如何編寫索引腳本?確切的問題發生侷限於1×N向量,3×N和4×N矩陣和3×3×N陣列的結構。掩碼是基於表示時間的矢量之一構造的。字段名稱對於每個結構都是不變的,所以我可以蠻橫強制事物並輸入命令並將其作爲函數運行,但我正在尋找一種智能的方式來對其進行索引。
更新:這是看起來很有前途的東西。
fn = fieldnames(S);
for x = 1:length(fn)
extraDim = repmat({':'}, 1, ndims(S.(fn{x})) - 1);
S2.(fn{x}) = S.(fn{x})(extraDim{:}, mask);
end
這混淆了我 –
@AnderBiguri允許在使用':''使索引與字符[有點不一致](http://stackoverflow.com/q/36189651/2586922),是 –