细胞中的操作
Operations in cells
我有一个 5x5 的单元格,每个单元格有 100x100 个单个数据。我想计算每个矩阵 100x100 中的模式,然后根据模式执行一些操作。我怎样才能做到这一点?
单元格:
每个单元格都有这样的 100x100 数据:
我有这段代码可以计算每个单元格的模式,现在我想将 100x100 矩阵上的每个值与相应的单元格模式进行比较。
I = imread('DSM.tif');
c = mat2cell(I, [100,100,100,100,100], [100,100,100,100,100])
for i=1:5
for j=1:5
mode_cell = mode(c{i,j}(:))
end
end
我做了这个代码:
modes = cellfun(@(x) mode(x(:)), c, 'UniformOutput', false);
modes = cell2mat(cellfun(@(x) mode(x(:)), c, 'UniformOutput', false));
for i = 1 :5
for j =1 :5
for i2=1 :100
for j2=1 :100
cell = c{i,j};
if cell(i2,j2)<modes(i,j)
teste(i,j)=0;
else
teste(i,j)=1;
end
end
end
end
end
但是使用这段代码矩阵teste只有100x100。我想附加所有睾丸矩阵,最后我想要一个 500x500 矩阵。我该怎么做?
编辑:根据您问题的更新更新答案
浓缩液(+)
:
%// 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
cell 矩阵(而不是值矩阵)。计算模式后,使用后续 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
现在,通过在单个 cellfun
中包含一个 bsxfun
命令,我们可以将上面的内容归结为一行;上面(+)
给出的浓缩解,即
teste = cell2mat(cellfun(@(x) bsxfun(@ge, x, mode(x(:))), c, 'UniformOutput', false));
%// 500x500 logical matrix
在编辑原始问题之前回答(计算模式并分配到 value 矩阵)
你可以使用cellfun
命令
myCellMatrix = ... %// 5x5 cell matrix with 100x100 data entries
modes = cellfun(@(x) mode(x(:)), myCellMatrix);
输出将是一个 5x5
值矩阵,其中包含每个 100x100 数据集的模式。
我有一个 5x5 的单元格,每个单元格有 100x100 个单个数据。我想计算每个矩阵 100x100 中的模式,然后根据模式执行一些操作。我怎样才能做到这一点?
单元格:
每个单元格都有这样的 100x100 数据:
我有这段代码可以计算每个单元格的模式,现在我想将 100x100 矩阵上的每个值与相应的单元格模式进行比较。
I = imread('DSM.tif');
c = mat2cell(I, [100,100,100,100,100], [100,100,100,100,100])
for i=1:5
for j=1:5
mode_cell = mode(c{i,j}(:))
end
end
我做了这个代码:
modes = cellfun(@(x) mode(x(:)), c, 'UniformOutput', false);
modes = cell2mat(cellfun(@(x) mode(x(:)), c, 'UniformOutput', false));
for i = 1 :5
for j =1 :5
for i2=1 :100
for j2=1 :100
cell = c{i,j};
if cell(i2,j2)<modes(i,j)
teste(i,j)=0;
else
teste(i,j)=1;
end
end
end
end
end
但是使用这段代码矩阵teste只有100x100。我想附加所有睾丸矩阵,最后我想要一个 500x500 矩阵。我该怎么做?
编辑:根据您问题的更新更新答案
浓缩液(+)
:
%// 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
cell 矩阵(而不是值矩阵)。计算模式后,使用后续 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
现在,通过在单个 cellfun
中包含一个 bsxfun
命令,我们可以将上面的内容归结为一行;上面(+)
给出的浓缩解,即
teste = cell2mat(cellfun(@(x) bsxfun(@ge, x, mode(x(:))), c, 'UniformOutput', false));
%// 500x500 logical matrix
在编辑原始问题之前回答(计算模式并分配到 value 矩阵)
你可以使用cellfun
命令
myCellMatrix = ... %// 5x5 cell matrix with 100x100 data entries
modes = cellfun(@(x) mode(x(:)), myCellMatrix);
输出将是一个 5x5
值矩阵,其中包含每个 100x100 数据集的模式。