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 件のコメント

Image Analyst
Image Analyst 2017 年 8 月 29 日
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?

サインインしてコメントする。

 採用された回答

Cam Salzberger
Cam Salzberger 2017 年 8 月 29 日
編集済み: Cam Salzberger 2017 年 8 月 31 日

1 投票

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 件のコメント

itend
itend 2017 年 8 月 29 日
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 2017 年 8 月 31 日
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

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange で Matrices and Arrays についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by