Matrisin bir vektöre verimli bir şekilde nasıl dönüştürüleceği. Örnek: (:)
notasyonu bana verirMATLAB: Matrix to Vector row-wise
>> a = [1 2; 3 4]
a =
1 2
3 4
:
>> b = a'; b(:)
ans =
1
2
3
4
aktarılması ve ek var atama yapar:
>> a(:)
ans =
1
3
2
4
ama bu kadar sonuç almak istiyoruz çok daha yavaş. Böyle reshape yoluyla atama olmadan yapabileceğini: çok küçük biraz daha hızlı bir öncekinden daha sonra
>> reshape(a',4,1)
ans =
1
2
3
4
, tezgah bkz:
runs = 1000;
num = 1000;
A = rand(num);
times = zeros(runs, 2);
for i = 1:runs
tic
x = A';
x = x(:);
t1 = toc;
x = reshape(A',size(A,1)*size(A,2),1);
t2 = toc-t1;
times(i,:) = [t1 t2];
end
format shortG
mt = mean(times)
mt =
0.0037877 0.0037699
uzakta gidiyorum varsa aktarılması çok çok daha hızlı olacak ve (:)
sözdizimi>% 100 daha hızlı olacaktır: böyle güzel Synta varsa yüzden soruyorum var
runs = 100;
num = 5000;
A = rand(num);
times = zeros(runs, 2);
for i = 1:runs
tic
x = A(:);
t1 = toc;
x = reshape(A,size(A,1)*size(A,2),1);
t2 = toc-t1;
times(i,:) = [t1 t2];
end
format shortG
mt = mean(times)
mt =
3.307e-07 8.8382e-07
x (:)
gibi ama bir vektör için satır-yanına almak !? Teşekkürler
evet ben de böyle bir şey düşünmüştüm, bildiğim gibi, MATLAB, fortran gibi, verileri ana sütun formatında bellekte tutuyordu http://en.wikipedia.org/wiki/Row-major_order#Column-major_order, ama yine de bir vektöre daha hızlı dönüşebileceğini düşünmüştüm. – tim
@bjoern Sanırım hafızada öğeleri değiştirmenin bir yolu yok. – Shai