MATLAB Answers

0

Finding the locations of non-similar value cells

Asked by Austin Sowers on 1 May 2019
Latest activity Edited by Austin Sowers on 1 May 2019
I have varying in size numeric cells within a cell array that contain random numbers betweem -10 and 200. I have another cell array with the same dimmensions as the first, only with different random values.
Lets call the 2 cell arrays “CA” and “CB”
I want to determine the cell array locations where there is a -10 in an "X" location in cell array CA, but not in cell array CB so that I may manipulate those specific values.

  0 Comments

Sign in to comment.

Products


Release

R2016b

1 Answer

Answer by the cyclist
on 1 May 2019
Edited by the cyclist
on 1 May 2019

I'm not certain I understand exactly what you want, but this is my best guess:
% Define input arrays
CA = {[-10 2],[6;6]};
CB = {[17 2],[6;6]};
% Logical index to locations where CA includes a value of -10, but CB does not
idx = cellfun(@(x)any(x(:)==-10),CA) & not(cellfun(@(x)any(x(:)==-10),CB));

  3 Comments

Yes that is great!
but I want to add 15 to the specific locations where the -10s do not match.
Sorry for being so confusing!
What specifically do you want the output to be, for my example?
CA = {[5 -10 2],[6 6 8],[0 9 -10 8 -10 3]};
CB = {[4 17 2],[6 6 10],[9 3 4 9 7 6]};
CC = {[1 2 4],[4 2 1],[1 7 3 1 2 2]};
for i = 1:length(CA)
idx = CA{i}==-10 ;
CB{i}(idx) = CB{i}(idx)+15 ;
end
I have figured out the first part. My output I wanted is the "new" CB generated in the for loop.
but now instead of adding 15 to all of them, I want to add different numbers to each depending on "CC." For example:
Just looking at the first group of each cell:
CA = {[5 -10 2]}
CB = {[4 17 2]}
CC = {[1 2 4]}
I would like to add the difference between the "1 and 4" in CC (l1-4l=3), to the "17" in CB.
So the first group in the "new" CB will be {[4 20 2]}.
BTW. I chose the numbers "1 and 4" in CC because they are the numbers that would be adjacent to the -10 in CA.

Sign in to comment.