Find and replace values in a cell array containing 3-D matrixes with numeric values
显示 更早的评论
Hi, I have a cell array with 6 cells, each cell containing a 3-D matrix of 640x480x30. I'm trying to find all zeros (0) in the cell array and replace them with NaNs.
In the general case, I have a cell array (MyCellArray) with -K- cells, each cell containing an arbitrary vector or matrix in an arbitrary size, with numeric values. I'm trying to find all places where MyCellArray contains the value of X (some number) and replace it with Y (some number).
Is there a way to do it without a for loop? Something like (that of course can't work) MyCellArray{MyCellArray==0}=NaN
Thanks!
采纳的回答
更多回答(1 个)
In the generic case, it is not possible to do it without a loop (or cellfun, but in this case, you'd have to use a .m function not an anonymous function:
for idx = 1:numel(yourcellarray)
m = yourcellarray{idx};
m(m == 0) = NaN;
yourcellarray{idx} = m;
end
In your example case, where all the matrices are the same size, then you'd be better off not using a cell array but a 4-D matrix. The replacement is then trivial:
m = cat(4, yourcellarray{:});
m(m == 0) = NaN;
5 个评论
Avishay Assayag
2018-4-20
Guillaume
2018-4-20
I'm not sure what you're referring to with "first line of code". The general solution does what you asked:
>> yourcellarray = {0:5, -1:1, eye(3)};
>> celldisp(yourcellarray)
yourcellarray{1} =
0 1 2 3 4 5
yourcellarray{2} =
-1 0 1
yourcellarray{3} =
1 0 0
0 1 0
0 0 1
We have a cell array with 3 matrices of different size, with some 0s in them. Let's try the code:
>> for idx = 1:numel(yourcellarray)
m = yourcellarray{idx};
m(m == 0) = NaN;
yourcellarray{idx} = m;
end
>> celldisp(yourcellarray)
yourcellarray{1} =
NaN 1 2 3 4 5
yourcellarray{2} =
-1 NaN 1
yourcellarray{3} =
1 NaN NaN
NaN 1 NaN
NaN NaN 1
All the zeros have been changed to NaN.
Avishay Assayag
2018-4-20
Stephen23
2018-4-20
m = cat(4, yourcellarray{:});
Guillaume
2018-4-20
Thanks, Stephen. Silly but crucial typo, now fixed in the original post.
类别
在 帮助中心 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!