0

我试图在不使用 for 或一段时间的情况下找到矩阵每一列中的第一个 1。说我有

-->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 可以更好地处理最后一个运算。

先感谢您!

4

1 回答 1

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来衡量这两种(或其他)解决方案的性能。

如果您想了解更多关于一些性能增强技术的信息,请查看此处

于 2013-06-22T14:39:11.363 回答