Arrays 查找矩阵中的第一个非零列

Arrays 查找矩阵中的第一个非零列,arrays,matlab,matrix,Arrays,Matlab,Matrix,如果我有如下矩阵A 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 所有其他列始终为零 我想得到数组B=[7 4 3 2] 我该怎么做 嘿,这是我能想到的获取所有非零元素的最简单代码: test_matrix = [ 2, 0 , 0 ,0 ,0;... 3, 0 , 0 ,0 ,0;... 4, 0 , 0 ,0 ,0;... 7, 0 ,

如果我有如下矩阵A

2 0 0 0 0 0 
3 0 0 0 0 0
4 0 0 0 0 0
7 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0 
0 0 0 0 0 0  
所有其他列始终为零

我想得到数组B=[7 4 3 2]


我该怎么做

嘿,这是我能想到的获取所有非零元素的最简单代码:

test_matrix = [ 2, 0 , 0 ,0 ,0;...
    3, 0 , 0 ,0 ,0;...
    4, 0 , 0 ,0 ,0;...
    7, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0];

B = test_matrix(test_matrix ~= 0) %//rowwise non zeroelements
输出是一列,我们需要转置它,然后翻转它。 如果将4的位置更改为列中的另一个插槽,它将显示在输出数组B的末尾。如果要将最后一个非零元素作为第一个输出,可以将数组转置:

B=fliplr(B'); %//fliping first to last and so in ( for the transpose array)
如果要对列进行排序,即使如上所述,4在数组中的其他位置,也可以使用转置矩阵:

helper= test_matrix' %//(')transposing Matrix
C = helper(helper ~=0) %//Columnwise non zero-elements
如果每列有多个非零元素,则必须检查它们是按行还是按列列出:检查B和C定义。显然,C不是逆序的,只要使用

 C=fliplr(C); %%//flipping first to last and so on
希望这能解释你所有的问题。
结果:

结果:

C= (7,4,3,2);
B= (4,7,3,2);

嘿,这是我能想到的获取所有非零元素的最简单代码:

test_matrix = [ 2, 0 , 0 ,0 ,0;...
    3, 0 , 0 ,0 ,0;...
    4, 0 , 0 ,0 ,0;...
    7, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0];

B = test_matrix(test_matrix ~= 0) %//rowwise non zeroelements
输出是一列,我们需要转置它,然后翻转它。 如果将4的位置更改为列中的另一个插槽,它将显示在输出数组B的末尾。如果要将最后一个非零元素作为第一个输出,可以将数组转置:

B=fliplr(B'); %//fliping first to last and so in ( for the transpose array)
如果要对列进行排序,即使如上所述,4在数组中的其他位置,也可以使用转置矩阵:

helper= test_matrix' %//(')transposing Matrix
C = helper(helper ~=0) %//Columnwise non zero-elements
如果每列有多个非零元素,则必须检查它们是按行还是按列列出:检查B和C定义。显然,C不是逆序的,只要使用

 C=fliplr(C); %%//flipping first to last and so on
希望这能解释你所有的问题。
结果:

结果:

C= (7,4,3,2);
B= (4,7,3,2);

嘿,这是我能想到的获取所有非零元素的最简单代码:

test_matrix = [ 2, 0 , 0 ,0 ,0;...
    3, 0 , 0 ,0 ,0;...
    4, 0 , 0 ,0 ,0;...
    7, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0];

B = test_matrix(test_matrix ~= 0) %//rowwise non zeroelements
输出是一列,我们需要转置它,然后翻转它。 如果将4的位置更改为列中的另一个插槽,它将显示在输出数组B的末尾。如果要将最后一个非零元素作为第一个输出,可以将数组转置:

B=fliplr(B'); %//fliping first to last and so in ( for the transpose array)
如果要对列进行排序,即使如上所述,4在数组中的其他位置,也可以使用转置矩阵:

helper= test_matrix' %//(')transposing Matrix
C = helper(helper ~=0) %//Columnwise non zero-elements
如果每列有多个非零元素,则必须检查它们是按行还是按列列出:检查B和C定义。显然,C不是逆序的,只要使用

 C=fliplr(C); %%//flipping first to last and so on
希望这能解释你所有的问题。
结果:

结果:

C= (7,4,3,2);
B= (4,7,3,2);

嘿,这是我能想到的获取所有非零元素的最简单代码:

test_matrix = [ 2, 0 , 0 ,0 ,0;...
    3, 0 , 0 ,0 ,0;...
    4, 0 , 0 ,0 ,0;...
    7, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0;...
    0, 0 , 0 ,0 ,0];

B = test_matrix(test_matrix ~= 0) %//rowwise non zeroelements
输出是一列,我们需要转置它,然后翻转它。 如果将4的位置更改为列中的另一个插槽,它将显示在输出数组B的末尾。如果要将最后一个非零元素作为第一个输出,可以将数组转置:

B=fliplr(B'); %//fliping first to last and so in ( for the transpose array)
如果要对列进行排序,即使如上所述,4在数组中的其他位置,也可以使用转置矩阵:

helper= test_matrix' %//(')transposing Matrix
C = helper(helper ~=0) %//Columnwise non zero-elements
如果每列有多个非零元素,则必须检查它们是按行还是按列列出:检查B和C定义。显然,C不是逆序的,只要使用

 C=fliplr(C); %%//flipping first to last and so on
希望这能解释你所有的问题。
结果:

结果:

C= (7,4,3,2);
B= (4,7,3,2);

您可以在列上循环并使用
find
。让我们坐飞机吧

M =
     0     0     1     0     0
     0     0     2     0     0
     0     0     3     0     0
     0     0     4     0     0
     0     0     0     0     0
作为我们的示例矩阵

for i = 1:size(M,2)
    ind = find(M(:,i));
    if ind
        found = ind;
        break;
    end
end
我会帮你的

found = 
    1
    2
    3
    4
found =
    4 3 2 1
你可以用它来翻转

found = found([end:-1:1])'
这会让你

found = 
    1
    2
    3
    4
found =
    4 3 2 1

您可以在列上循环并使用
find
。让我们坐飞机吧

M =
     0     0     1     0     0
     0     0     2     0     0
     0     0     3     0     0
     0     0     4     0     0
     0     0     0     0     0
作为我们的示例矩阵

for i = 1:size(M,2)
    ind = find(M(:,i));
    if ind
        found = ind;
        break;
    end
end
我会帮你的

found = 
    1
    2
    3
    4
found =
    4 3 2 1
你可以用它来翻转

found = found([end:-1:1])'
这会让你

found = 
    1
    2
    3
    4
found =
    4 3 2 1

您可以在列上循环并使用
find
。让我们坐飞机吧

M =
     0     0     1     0     0
     0     0     2     0     0
     0     0     3     0     0
     0     0     4     0     0
     0     0     0     0     0
作为我们的示例矩阵

for i = 1:size(M,2)
    ind = find(M(:,i));
    if ind
        found = ind;
        break;
    end
end
我会帮你的

found = 
    1
    2
    3
    4
found =
    4 3 2 1
你可以用它来翻转

found = found([end:-1:1])'
这会让你

found = 
    1
    2
    3
    4
found =
    4 3 2 1

您可以在列上循环并使用
find
。让我们坐飞机吧

M =
     0     0     1     0     0
     0     0     2     0     0
     0     0     3     0     0
     0     0     4     0     0
     0     0     0     0     0
作为我们的示例矩阵

for i = 1:size(M,2)
    ind = find(M(:,i));
    if ind
        found = ind;
        break;
    end
end
我会帮你的

found = 
    1
    2
    3
    4
found =
    4 3 2 1
你可以用它来翻转

found = found([end:-1:1])'
这会让你

found = 
    1
    2
    3
    4
found =
    4 3 2 1

您的问题不清楚,但这似乎符合您的要求(因为所有其他列都是零):


您的问题不清楚,但这似乎符合您的要求(因为所有其他列都是零):


您的问题不清楚,但这似乎符合您的要求(因为所有其他列都是零):


您的问题不清楚,但这似乎符合您的要求(因为所有其他列都是零):


一列中是否始终只有一个非零元素?生成的数组需要什么顺序?倒柱?以最大的第一名排序?元素都在第1行吗?您的示例非常简单,您可以只执行
B=A(fliplr(find(A)))
——但在很多情况下都会失败。因此,如果它不适合您,请发布一个更重要的示例Minion@thewaywewalk它对我不起作用它只给我一个元素一列中总是只有一个非零元素吗?生成的数组需要什么顺序?倒柱?以最大的第一名排序?元素都在第1行吗?您的示例非常简单,您可以只执行
B=A(fliplr(find(A)))
——但在很多情况下都会失败。因此,如果它不适合您,请发布一个更重要的示例Minion@thewaywewalk它对我不起作用它只给我一个元素一列中总是只有一个非零元素吗?生成的数组需要什么顺序?倒柱?以最大的第一名排序?元素都在第1行吗?您的示例非常简单,您可以只执行
B=A(fliplr(find(A)))
——但在很多情况下都会失败。因此,如果它不适合您,请发布一个更重要的示例Minion@thewaywewalk它对我不起作用它只给我一个元素一列中总是只有一个非零元素吗?还有什么