Arrange string based on 1 or 0 value

2 visualizaciones (últimos 30 días)
yue ishida
yue ishida el 4 de Jul. de 2017
Editada: Guillaume el 4 de Jul. de 2017
Hi. I have question regarding to cell string and matrix. I have matrix F and cell string D. I want to create another cell string Y.
F =
0 0 0 0
1 0 0 1
0 1 1 1
1 1 1 1
D =
'A'
'B'
'C'
'D'
Therefore, I want to create Y with output like this.
Y =
'-'
'A, D'
'B, C, D'
'A, B, C, D'
The steps are:
-1- recognize column positions of value 1 for row 1 in F.
-2- the column positions are equal to row positions of D. So, string in that row positions will input to row 1 of Y.
-3- do the same step for next row in F and D. If no value 1 for that row, that row position of Y will be empty, and maybe can be replace with sign - as to indicate no string available from D.

Respuesta aceptada

Stephen23
Stephen23 el 4 de Jul. de 2017
Editada: Stephen23 el 4 de Jul. de 2017
[col,row] = find(F');
fun = @(v){sprintf(', %s',D{v})};
out = accumarray(row,col,[],fun);
out = cellfun(@(s)s(3:end),out,'uni',0)
out(cellfun('isempty',out)) = {'-'};
giving:
>> out{:}
ans = -
ans = A, D
ans = B, C, D
ans = A, B, C, D
  3 comentarios
Stephen23
Stephen23 el 4 de Jul. de 2017
Editada: Stephen23 el 4 de Jul. de 2017
@Guillaume: agreed... but sadly not on the MATLAB version I have.
Guillaume
Guillaume el 4 de Jul. de 2017
Editada: Guillaume el 4 de Jul. de 2017
It's trivial to implement:
function s = strjoin(strings, joint)
join = cell(2, numel(strings));
join(1, :) = strings(:);
join(2, 1:end - 1) = {joint};
s = [join{:}];
end

Iniciar sesión para comentar.

Más respuestas (1)

KSSV
KSSV el 4 de Jul. de 2017
F =[0 0 0 0
1 0 0 1
0 1 1 1
1 1 1 1] ;
D = {'A' 'B' 'C' 'D'} ;
F = logical(F) ;
for i = 1:4
iwant = D(F(i,:))
end
  2 comentarios
Jan
Jan el 4 de Jul. de 2017
Editada: Jan el 4 de Jul. de 2017
Note: Changing the type of a variable can degrade the processing speed, because the JIT acceleration is impeded. Something like LF=logical(F) is a very cheap way to increase the speed.
yue ishida
yue ishida el 4 de Jul. de 2017
The final iwant is not similar with Y. The output is like this
iwant =
Empty cell array: 1-by-0
iwant =
'A' 'D'
iwant =
'B' 'C' 'D'
iwant =
'A' 'B' 'C' 'D'
so final is ABCD in one row, not 4 rows, unlike Y. Can you help me find the right one?

Iniciar sesión para comentar.

Categorías

Más información sobre Just for fun 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