我有一个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},:);
答案 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" ...
请注意,如果您正在谈论单元格A
,B
等,请注意其中一些不会有两列或三列作为循环进行来自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