2015-03-07 4 views

ответ

1

Я считаю, что логическая индексация работает быстрее, чем bsxfun на моем компьютере. Здесь времена выборки для различных методов:

tic; 
for j=1:10000 
    Y = [1 2 3 3 2 1 1 2 3]'; 
    n = length(Y); 
    Ym = zeros(n, n); 
    for i=1:n 
     index = find(Y==Y(i)); 
     Ym(i, index') = 1; 
    end 
end 
disp('Method 1:'); 
toc; 

tic; 
for j=1:10000 
    Y = [1 2 3 3 2 1 1 2 3]'; 
    n = length(Y); 
    Ym = zeros(n, n); 
    for i=1:n 
     Ym(i, Y==Y(i)') = 1; 
    end 
end 
disp('Method 2:'); 
toc; 
tic; 
for j=1:10000 
    Y = [1 2 3 3 2 1 1 2 3]'; 
    n = length(Y); 
    Ym = zeros(n, n); 
    a=repmat(Y,1,n); 
    b=repmat(Y',n,1); 
    Ym(a==b)=1; 
end 
disp('Method 3:'); 
toc; 

tic; 
for j=1:10000 
    Y = [1 2 3 3 2 1 1 2 3]'; 
    Ym = bsxfun(@eq,Y,Y.'); 
end 
disp('Method 4'); 
toc 

ВЫВОД:

Method 1: 
Elapsed time is 0.111412 seconds. 
Method 2: 
Elapsed time is 0.069617 seconds. 
Method 3: 
Elapsed time is 0.246780 seconds. 
Method 4 
Elapsed time is 0.103120 seconds. 
+0

Привет, большое спасибо за любезное предоставление этих возможных реализаций и сравнение. Я запускаю ваш код несколько раз, кажется, что 4-й метод является самым быстрым. И у тестирующего компьютера нет других программ. Второй метод - второй по величине с очень небольшим медленным, чем 4-й метод. – mining

+1

Как я понимаю, bsxfun должен быть примерно равен второму методу. Но когда я заметил аномалию на своем компьютере, я решил, что должен поделиться всеми методами, которые вам подходят. – lonstud

+0

Спасибо! Я очень благодарен за ваш обмен! На самом деле, я столкнулся с некоторыми проблемами производительности, поэтому я хочу ускорить эти сценарии, которые работают медленно. Но, с другой стороны, я обнаружил, что у меня больше нет мысли о том, как ускорить их. Ваш обмен означает много! Благодаря! Что касается скорости, я думаю, что она более или менее зависит от условий работы оборудования или программного обеспечения. – mining

Смежные вопросы