How to place NaN at diagonal position in cell array?

3 visualizaciones (últimos 30 días)
Tha saliem
Tha saliem el 6 de Mzo. de 2018
Comentada: Tha saliem el 7 de Mzo. de 2018
hey all
a={[],-1,-1,0.8,-0.7,[],[]; [],[],0.9,1,[],-0.9,0.6; -1,[],[],0.9,0.2,[],0.8}
how to place diagonal value in each row of 'a'. Diagonal value can be [] or NaN. Like this
out={NaN,[],-1,-1,0.8,-0.7,[],[]; [],NaN,[],0.9,1,[],-0.9,0.6; -1,[],NaN,[],0.9,0.2,[],0.8}
  3 comentarios
Tha saliem
Tha saliem el 6 de Mzo. de 2018
yes a is 3x7 matrix while out will be of 3x8.. one place for diagonal value will be added
Tha saliem
Tha saliem el 7 de Mzo. de 2018
Thanks to all for giving useful answers. I am accepting answer based on efficiency of approach as i have to apply it on a large dataset.. Thanks again :)

Iniciar sesión para comentar.

Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 6 de Mzo. de 2018
Editada: Andrei Bobrov el 6 de Mzo. de 2018
a={[],-1,-1,0.8,-0.7,[],[]; [],[],0.9,1,[],-0.9,0.6; -1,[],[],0.9,0.2,[],0.8};
[m,n] = size(a);
z = sort([repmat(1:n,m,1),(1:m)' - .5],2);
t = rem(z.',1) == 0;
out = cell(size(t));
out(t) = a';
out(~t) = {nan};
out = out';
or
a={[],-1,-1,0.8,-0.7,[],[]; [],[],0.9,1,[],-0.9,0.6; -1,[],[],0.9,0.2,[],0.8};
[m,n] = size(a);
out = num2cell(nan(m,n+1));
out(triu(true(m,n+1),1)) = a(triu(true(m,n)));
out(tril(true(m,n+1),-1)) = a(tril(true(m,n),-1));

Más respuestas (3)

James Tursa
James Tursa el 6 de Mzo. de 2018
Assuming there are at least as many columns as rows:
[m,n] = size(a);
out = cell(n+1,m);
x = logical(eye(size(out)));
out(~x) = a';
out(x) = {nan};
out = out';
  2 comentarios
Jos (10584)
Jos (10584) el 6 de Mzo. de 2018
nice one, James
Tha saliem
Tha saliem el 7 de Mzo. de 2018
A good approach too.. Thank You for your time

Iniciar sesión para comentar.


Jos (10584)
Jos (10584) el 6 de Mzo. de 2018
a={[],-1,-1,0.8,-0.7,[],[]; [],[],0.9,1,[],-0.9,0.6; -1,[],[],0.9,0.2,[],0.8}
sz = size(a)
out = repmat({NaN}, sz + [0 1])
tf = triu(true(sz))
tfc = false(sz(1),1)
out([tfc tf]) = a(tf)
out([~tf tfc]) = a(~tf)
(btw, why use cell arrays?)
  1 comentario
Tha saliem
Tha saliem el 7 de Mzo. de 2018
Thank You for your time.. Actually this cell array is a result of some mathematical calculation so i have to use it as a cell array.

Iniciar sesión para comentar.


Jos (10584)
Jos (10584) el 6 de Mzo. de 2018
Put NaNs on the diagonal:
tf = eye(size(a))==1
a(tf) = {NaN}
  1 comentario
Tha saliem
Tha saliem el 6 de Mzo. de 2018
Thankyou for answering but it replaces the diagonal value with NaN. I want to create a new place for Diagonal value and put NaN at that place. Other values remains same

Iniciar sesión para comentar.

Categorías

Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by