在 Matlab 中使用指示矩阵创建标签向量

发布于 2024-11-09 17:40:46 字数 466 浏览 5 评论 0原文

给定一个大小为nx k的二进制矩阵M,我想创建一个大小为nx 1的向量Label这样 Label 的条目应包含 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' ]

Given a binary matrix M of size n x k, i would like to create a vector Label of size n x 1 such that entry of Label should contain the concatenated column index of M where its values are 1

for eg: If the M Matrix is given as

M = [ 0 0 1 1  
      0 0 0 1  
      1 0 0 1
      0 0 0 0
      1 1 1 0 ]

The resultant Label Vector should be

 V = [ '34'  
        '4'  
       '14'  
        '0'
      '123' ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

醉殇 2024-11-16 17:40:46

这是一种以矢量化方式紧凑地完成此操作的方法。

[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'

Here is one way to do it compactly and in a vectorized manner.

[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'
恍梦境° 2024-11-16 17:40:46

这是使用 FINDACCUMARRAY 返回 N×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'

Here's a solution using FIND and ACCUMARRAY that returns an N-by-1 cell arrays of strings:

>> [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'
疾风者 2024-11-16 17:40:46

您可以使用 find 函数或循环来构建字符串(替换空完成后数组索引为“0”)。

You can use the find function or loop to build the strings (replacing empty array indices with '0' after finishing).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文