У меня есть массив ячеек в MATLAB, который содержит некоторые матрицы в порядке убывания размера (например, [512x512 double] [256x256 double] [128x128 double] и т. Д.).Минимальные значения массивов ячеек в MATLAB
Теперь я хочу найти и уничтожить (превращаются в нули) 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'] (http://nl.mathworks.com/help/matlab/ref/cellfun.html) – Adriaan
Привет ... так в чем дело? Помогли ли мы вам? – rayryeng
Если один из ответов разрешил ваш вопрос, пожалуйста, рассмотрите [его принятие] (http://meta.stackexchange.com/q/5234/179419), нажав галочку. Это означает, что вы нашли решение, и это уже не открытый вопрос. Если на ваш вопрос не ответил, пожалуйста, объясните, чего не хватает. – Daniel