【问题标题】:How to set all ones in a matrix to zero except the first of every column?如何将矩阵中的所有1设置为零,除了每列的第一个?
【发布时间】:2014-04-08 07:02:50
【问题描述】:

我在 matlab 中有一个矩阵显示如下:

[ 1 0 1;0 1 1;1 1 0 ]

如何将其细化为如下所示的矩阵?

[ 1 0 1;0 1 0; 0 0 0 ]

这意味着我只想取每列中出现的前 1 个。

谢谢!

【问题讨论】:

  • @user3509735 欢迎来到 StackOverflow!如果有一个答案足以回答您的问题,请将其标记为已解决。 (每个问题左侧的绿色复选标记)。它向系统和回答者表明你的幸福;)

标签: matlab matrix


【解决方案1】:

可能是多种可能性之一:

result = ( cumsum(A,1) == A ) & A

result =

     1     0     1
     0     1     0
     0     0     0

解释: cumsum(A,1) == A 过滤掉所有较低的 1... & A 将较高的零设置回零,因为它们在前一步得到了。

【讨论】:

    【解决方案2】:

    另一种方法:使用max 获取每列中第一个的行和列索引。这是可能的,因为max 的第二个输出给出了每列的第一个最大值的位置。

    [val, row] = max(A);
    col = find(val); %// if max value is 0 => there aren't any 1's in that column
    result = zeros(size(A));
    result(sub2ind(size(A),row,col)) = 1;
    

    【讨论】:

    • 我不完全确定,但你不应该在第一行转置A 吗? -> max(A')
    • @thewaywewalk 谢谢。我认为它是正确的:row 给出每列最大值的(行)位置,val 给出它的值(将用于查找列)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多