我试图在矩阵的每列中找到第一个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会更好地处理最后的循环。
提前谢谢!
答案 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。