compare cell array elements with non zero elements in 2D array

1 Ansicht (letzte 30 Tage)
hey i have cell array containing multiple elements e.g.
x{1,1}={2;1}
x{2,1}={1;[1;2]}
and a 2D array:
y=[0,0,-1,1,0,0;-1,0,1,-1,0,0]
for x{1,1}{1,1}=2, it will consider 1st non zero column value (e.g. 3 in 1st row is first non zero column index ) in 1st row of y, and in 2nd row(As x{1,1}{1,1}=2), it will check what value is placed at that non zero index and store it in another cell array. for x{1,1}{2,1} it will consider 2nd non zero element of 1st row.
for x{2,1}{1,1}=1, it will consider 2nd row and check which 1st non zero element.
  1 Kommentar
Tha saliem
Tha saliem am 11 Apr. 2017
Result would be like this:
result{1,1}{1,1}=1
result{1,1}{2,1}=1
result{2,1}{1,1}=0
result{2,1}{2,1}=[-1;1]

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Guillaume
Guillaume am 11 Apr. 2017
Bearbeitet: Guillaume am 11 Apr. 2017
I assume you've made a mistake with your example result. How can you have 0 in the outptu if you only look at the non-zero values. Also, the first non-zero value in row 1 is -1, so I assume that result{1}{2} should be -1.
If so:
result = cell(size(x));
for row = 1:size(x, 1)
ynonzeros = nonzeros(y(row, :));
result{row} = cellfun(@(cols) ynonzeros(cols), x{row}, 'UniformOutput', false);
end
Because of the need of the temporary ynonzeros it's not possible to replace the outer loop with an arrayfun with an anonymous function, as I had in my previous answer.
  5 Kommentare
Guillaume
Guillaume am 13 Apr. 2017
result = cell(size(x));
for row = 1:size(x, 1)
ycols = find(y(row, :));
result{row} = arrayfun(@(r) y(x{row}{r}, ycols(r)), ....
(1:numel(x{row})).', ...
'UniformOutput', false);
end
Tha saliem
Tha saliem am 13 Apr. 2017
yes its completely accurate. Thank you so much for help.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Data Preprocessing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by