ループの代わりにプロット操作に cellfun を使用するのが大好きです。たとえば、複数のセンサー データ セットがあり、各セットに複数の列がある場合 (セットごとに複数のセンサーがあるため)、非常に便利です。
numOfSensors = 5;
numOfSets = 6;
%% sample data preparation
x = 1:100;
y = rand(length(x), numOfSets*numOfSensors);
yCell = mat2cell(y, 100, numOfSensors*ones(1,numOfSets)); % this is my sensor data
scaleCell = num2cell(fliplr(cumsum(1:numOfSets)));
yCell = cellfun(@(x, scale)x.*scale, yCell, scaleCell, 'unif', false);
%% plot preparation
nameCell = arrayfun(@(x)['sensor set ' num2str(x)], 1:numOfSets, 'unif', false);
colorCell = num2cell(lines(numOfSets), 2)';
%% plot
figure, hold all,
set(gca, 'ColorOrder', [0 0 0], 'LineStyleOrder', {'-','--','-*','-.',':'})
h = cellfun(@(y, name, c)plot(x, y, 'linewidth', 1.5, 'displayName', name, 'color', c), yCell, nameCell, colorCell, 'unif', false);
hh = cellfun(@(x)x(1), h, 'unif', false);
legend([hh{:}])
ループする代わりに。この例では、すべてのデータセット、各データセットを独自の色でプロットし、データセットごとの各センサーを別の線種でプロットします。凡例は、各データ セットに対してのみ表示されます (注: これは、hggroups を使用して行うこともできます)。
または、より単純な使用例-データのセル配列が再びあり、それを簡単に表示したい:
figure, hold all, cellfun(@plot,dataCell)
これで、1 行、コマンド ラインで非常に高速に実行できます。
もう 1 つの優れた使用例は、mean()、max()、min()、std() などを使用して高次元データの数値データを圧縮することですが、これについては既に言及しました。データのサイズが均一でない場合、これはさらに重要になります。