Arrange string based on 1 or 0 value

2 ビュー (過去 30 日間)
yue ishida
yue ishida 2017 年 7 月 4 日
編集済み: Guillaume 2017 年 7 月 4 日
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.

採用された回答

Stephen23
Stephen23 2017 年 7 月 4 日
編集済み: Stephen23 2017 年 7 月 4 日
[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 件のコメント
Stephen23
Stephen23 2017 年 7 月 4 日
編集済み: Stephen23 2017 年 7 月 4 日
@Guillaume: agreed... but sadly not on the MATLAB version I have.
Guillaume
Guillaume 2017 年 7 月 4 日
編集済み: Guillaume 2017 年 7 月 4 日
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

サインインしてコメントする。

その他の回答 (1 件)

KSSV
KSSV 2017 年 7 月 4 日
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 件のコメント
Jan
Jan 2017 年 7 月 4 日
編集済み: Jan 2017 年 7 月 4 日
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 2017 年 7 月 4 日
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?

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeJust for fun についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by