我目前正在 MatLab 中的結構陣列中組織異構資料,例如,
patient.name = 'John Doe';
patient.billing = 127;
patient.test = [79 75 73 180 178 177.5; 220 210 205 79 75 73; 180 178 177.5 20 210 205;];
patient(2).name = 'Ann Lane';
patient(2).billing = 28.50;
patient(2).test = [68 70 68; 118 118 119; 172 170 169; 220 210 205];
假設我想做一些更高級的索引,我想查看每個患者的測驗欄位的大小。這些欄位都有不同的大小,這就是為什么我想為每個患者使用不同的結構。
我想做一些類似的事情:
%This does not work
disp(patient([size(patient.test,1)]>3))
例如,檢查patient.test 的陣列是否有超過3 行,并使用生成的布爾陣列來索引整個結構體陣列。我認為我的語法完全錯誤,但我還沒有找到有關如何正確執行的示例。幫助將不勝感激!
uj5u.com熱心網友回復:
patient.test將給出欄位內容的逗號分隔串列。您可以將該串列收集到一個元胞陣列中,并cellfun用于將該size函式應用于每個元胞的內容:
>> sz = cellfun(@size, {patient.test}, 'UniformOutput', false);
>> celldisp(sz)
sz{1} =
3 6
sz{2} =
4 3
如果你只是想顯示的大小,你可以使用cellfun應用一個匿名函式,做的是:
>> cellfun(@(c) disp(size(c)), {patient.test})
3 6
4 3
要根據欄位的大小獲取索引:
>> ind = cellfun(@(c) size(c,1)>3, {patient.test})
ind =
1×2 logical array
0 1
進而
patient_selected = patient(ind);
或者,如果您更喜歡一行,
patient_selected = patient(cellfun(@(c) size(c,1)>3, {patient.test}));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/318495.html
標籤:MATLAB
