Scilab:如何在没有循环的情况下在每列中找到前1个

时间:2013-06-21 16:01:41

标签: find scilab

我试图在矩阵的每列中找到第一个1而不使用for或者while。说我有

-->A
 A  =

    1.    0.    0.    0.  
    0.    0.    1.    1.  
    1.    0.    1.    1.  
    1.    1.    0.    0. 

然后我想获得[1,4,2,2](我可以假设每列中总有一个1)。问题是,当我使用find(A)时,它会给我[1,3,4,8,10,11,14,15]

我被告知不要使用循环而是使用矩阵操作,因为scilab会更好地处理最后的循环。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

使用这样一个小矩阵,使用for循环可以足够快,并且可能更容易阅读。但是避免使用for循环的一个解决方案可能如下。

//Find all rows and cols of the ones in A
[row,col] = find(A);

//Get all row positions that are in a new column index
disp( row( find([1,diff(col)]) ));

我认为更可行的解决方案如下:

//For each column
for col=1:4

   //Find only the first occurence
   disp(find(A(:,col),1));

end

如上所述,如此小的矩阵可读性应该是更高的优先级。您可以通过profiling来衡量两种(或其他)解决方案的效果。

如果您想了解有关某些性能增强技术的更多信息,请查看here