Thresholding Matrix Within Cell Array

Hello,
I have a cell array called output. Each cell within output contains a 1024 x 1024 matrix. I would like to threshold each matrix so that elements below a given value are set to NaN.
I tried using:
output(output < 100000) = NaN;
However, I feel that this is the wrong approach. Intuitively, I want to use a for loop, however, I don't think that will be the most efficient method possible.
Thoughts? Suggestions?
Thanks :)

1 commentaire

Image Analyst
Image Analyst le 29 Août 2017
Why are you using a cell array instead of a regular 3-D array, and why did you want to set it to NaN? What are you going to do with the output array after that?

Connectez-vous pour commenter.

 Réponse acceptée

Cam Salzberger
Cam Salzberger le 29 Août 2017
Modifié(e) : Cam Salzberger le 31 Août 2017
cellfun is your friend here. You can create a local, nested, or regular function to do the NaN-setting, and then just apply it to each element of the cell array:
function A = filterMatrix(A,thresh)
A(A < thresh) = NaN;
end
Then call it with:
filteredOutput = cellfun(@(A) filterMatrix(A, 100000), output, 'UniformOutput', false);
-Cam

2 commentaires

Thank you for your response.
Unfortunately, it produced an error:
f = @(A) A(A < 100000) = NaN;
Error: The expression to the left of the equals sign is not a valid target for an assignment.
What do you think?
Cam Salzberger
Cam Salzberger le 31 Août 2017
Ah, sorry about that. I forgot you can't do assignment in anonymous functions. Easy enough to make a separate function for it though. I've edited my answer above to function correctly.
Image Analyst has a point though; could you not just create a 3-D matrix originally? That would allow you to do the whole thing in a single call. Also would take less overhead, though it will need a larger contiguous memory chunk.
-Cam

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by