Edit: Обновленный ответ в соответствии с обновлением вашего вопроса
конденсированного раствора (+)
:
%// data
I = imread('DSM.tif');
c = mat2cell(I, [100,100,100,100,100], [100,100,100,100,100])
%// 5x5 cell matrix with 100x100 data entries
%// solution
teste = cell2mat(cellfun(@(x) bsxfun(@ge, x, mode(x(:))), c, 'UniformOutput', false));
%// 500x500 logical matrix
Объяснение:
Как ранее (см предыдущий ответ ниже), используйте cellfun
, но включают в себя пар имя-значение 'UniformOutput', false'
, так что полученный modes
является матрицей 5x5
(а не матрицей значений). После вычисления режимов используйте следующий вызов cellfun
для вычисления логических элементов в соответствии с вашими спецификациями.
%// data
I = imread('DSM.tif');
c = mat2cell(I, [100,100,100,100,100], [100,100,100,100,100])
%// 5x5 cell matrix with 100x100 data entries
%// modes: 5x5 cell matrix with single value entries (mode)
modes = cellfun(@(x) mode(x(:)), c, 'UniformOutput', false);
%// teste: 5x5 cell matrix with 100x100 logical (0/1) entries
teste = cellfun(@ge, c, modes, 'UniformOutput', false);
В логических выражениях в teste
описывает, для каждого значения в каждом блоке 100x100
данных, если значение меньше, чем значение режима для соответствующего блока:
0 : values in block less than block mode,
1 : values greater or equal to block mode.
Наконец, если вы хотите конвертировать массив ячеек 5x5
teste
(с каждой ячейкой, содержащей 100x100
логических записей) до единственной логической матрицы 500x500
, вы можете использовать команду cell2mat
, примененную к матрице ячеек teste
:
testeSingleValueMatrix = cell2mat(teste)
%// 500x500 logical matrix
Теперь, в том числе bsxfun
команду в одном cellfun
, мы можем сводиться выше на одной линии; сгущенное решение дано в (+)
выше, а именно
teste = cell2mat(cellfun(@(x) bsxfun(@ge, x, mode(x(:))), c, 'UniformOutput', false));
%// 500x500 logical matrix
Ответ предыдущий на редактирование исходного вопроса (вычислительные режимы и назначения в значение матрицу)
Вы можете использовать cellfun
команда
myCellMatrix = ... %// 5x5 cell matrix with 100x100 data entries
modes = cellfun(@(x) mode(x(:)), myCellMatrix);
Выходной сигнал будет содержать значение 5x5
. ng режим для каждого набора данных 100x100.
Используйте цикл for или cellfun, независимо от того, что вы предпочитаете. – Daniel
У меня уже есть режим каждой ячейки. Но как я могу сравнить значение каждой матрицы 100x100 с соответствующим режимом ячейки? –
Когда вы задаете вопросы, проясните, что вы уже поняли и что вам нужно. Теперь вы получили ответ и комментарий, объясняющий, как делать то, что вы уже реализуете. – Daniel