【发布时间】:2016-04-13 07:14:13
【问题描述】:
我在 MATLAB 中有一个元胞数组,其中包含一些按大小降序排列的矩阵(例如 [512x512 double] [256x256 double] [128x128 double] 等)。
现在我想找到并擦除(变成零)元胞数组总共中矩阵中的 100 个最小元素(而不是单独在每个矩阵中)。例如,最小的元素可能在 128x128 矩阵中,下一个在 512x512 矩阵中,依此类推。
我怎样才能最有效地做到这一点?
下一个是我的超慢代码,用于三个这样的单元格数组 - H、D、V(percent2zero 是从整个单元格数组中擦除的元素百分比的参数):
details=[H;D;V];
for k=1:3
numOfLevels=length(details(k,:));
TotalCoeffs=0;
minimalInEachLevel=zeros(1,numOfLevels);
for i=1:numOfLevels
temp=cell2mat(details(k,i));
TotalCoeffs=TotalCoeffs+numel(temp);
minimalInEachLevel(i) = min(min(abs(temp)));
end
CoeffsToBeRemoved=percent2zero*TotalCoeffs/100;
for i=1:CoeffsToBeRemoved
for j=1:numOfLevels
temp=cell2mat(details(k,j));
minimalInEachLevel(j) = min(min(abs(temp)));
end
[val,ind]=min(minimalInEachLevel);
temp=cell2mat(details(k,ind));
temp(find(abs(temp==val),1))=0;
details(k,ind)=mat2cell(temp,size(temp,1),size(temp,2));
end
end
【问题讨论】:
-
看看
cellfun -
嗨...怎么了?我们帮你了吗?
-
如果其中一个答案解决了您的问题,请通过单击复选标记考虑accepting it。这表明您已经找到了解决方案,这不再是一个悬而未决的问题。如果您的问题没有得到解答,请说明缺少的内容。
标签: matlab