给定大小 nxk 的二进制矩阵 M ,我想创建一个大小为 nx 1的标签 strong>这样标签的输入应包含 M 的连续列索引,其值 1
例如:如果 M 矩阵为
M = [ 0 0 1 1
0 0 0 1
1 0 0 1
0 0 0 0
1 1 1 0 ]
结果标签向量应为
V = [ '34'
'4'
'14'
'0'
'123' ]
答案 0 :(得分:4)
这是一种以矢量化的方式紧凑地完成它的方法。
[nRows,nCols]=size(M);
colIndex=sprintf('%u',0:nCols);
V=arrayfun(@(x)colIndex(logical([~any(M(x,:)) M(x,:)])),1:nRows,'UniformOutput',false)
V =
'34' '4' '14' '0' '123'
答案 1 :(得分:2)
这是一个使用FIND和ACCUMARRAY的解决方案,它返回一个N-by-1单元格的字符串数组:
>> [r,c] = find(M); %# Find the row and column indices of the ones
>> V = accumarray(r,c,[],@(x) {char(sort(x)+48).'}); %'# Accumulate and convert
%# to characters
>> V(cellfun('isempty',V)) = {'0'} %# Fill empty cells with zeroes
V =
'34'
'4'
'14'
'0'
'123'
答案 2 :(得分:1)
您可以使用find函数或循环来构建字符串(在完成后将空数组索引替换为'0'。