圆形元素的单元格

时间:2016-12-12 11:39:57

标签: arrays matlab rounding cells

我有一个80x1单元格数组,其中每个单元格元素的大小不同。我想将每个单元格的第二列和第三列四舍五入到最接近的整数,除以4.我不知道锄头要做到这一点。我到目前为止尝试过cellfun,但它确实有效。请参阅下面的代码:

clear all; 
clc;
for k = 1 : 80 
    A{k} = 1 : k; 
end 

for k = 1 : 80 
    B{k} = 1 : k; 
end 

for k = 1 : 80 
    newb{k} = 1 : k; 
end

for k = 1 : 80 
    r5{k} = 1 : k; 

    % code to create Mcell i.e cell array 400 x 1 
    Mcell = mat2cell(a5n,repmat(174,400,1),3)

    %each image size x and y 
    for ii=1:80 [A{ii,1},B{ii,1}] =find(Mcell{ii,1} == 280);

    % ii 
    %find sizes 13 and their locations in Mcell(ii,1)  
    newb{ii,1}=Mcell{ii,1}(A{ii,1},:);

    %ii matrix with size and locations x y. i.e size=13 x=4 y=50 
end 

cellfun(@round,newbii,1}(:,2:3)/4)*4);   

newb{ii,1}=Mcell{ii,1}(A{ii,1},:);

2 个答案:

答案 0 :(得分:0)

这应该做你的事:

cellfun(@(x)(round(x(:,[2:3])/4)), C, 'UniformOutput', false)

答案 1 :(得分:0)

为了回应您的代码,首先您不需要这么多for个循环!

一个包含所有相似行的1:80循环......

for k = 1:80

    A{k} = 1 : k; 
    B{k} = 1 : k;
    newB{k} = 1 : k;
    r5{k} = 1 : k;

    % code to create Mcell i.e cell array 400 x 1 
    Mcell = mat2cell(a5n,repmat(174,400,1),3)

    % Not sure what your further lines are trying to achieve
    % so I have stopped copying code here...

end

在回答您的实际问题时,将第二列和第三列中的值四舍五入到最接近的整数除以4" ...

请注意,如果您正在谈论单元格AB等,请注意其中一些不会有两列或三列作为循环进行来自1所以第一个条目只有1列?

但是除了您的初始代码之外,您应该能够使用名为80x1的{​​{1}}单元格执行以下操作:

myCell

目前还不清楚你是想在除法之前或之后四舍五入。上面的代码首先是圆形的,如果你想在之后进行舍入而不是使用

for i = 1:80 % Access myCell{Row}(Column) % Where myCell contains 80 row vectors myCell{i}(2) = round(myCell{i}(2)) / 4; myCell{i}(3) = round(myCell{i}(3)) / 4; end