7
如何有效地將矩陣轉換爲矢量向量。 例子:MATLAB:矩陣到矢量行
>> a = [1 2; 3 4]
a =
1 2
3 4
的(:)
符號給我:
>> a(:)
ans =
1
3
2
4
,但我想要得到的結果是這樣的:
>> b = a'; b(:)
ans =
1
2
3
4
的換位和附加無功分配使得它慢得多。 我可以通過整形做沒有分配是這樣的:
>> reshape(a',4,1)
ans =
1
2
3
4
這是一個非常小的快一點再上一個,看到替補席:
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
如果我要離開走換位那將是非常非常快和(:)
語法爲> 100%的速度:
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像(:)
,但要獲得行嚮明智! 謝謝
是的我也想過類似這樣的事情,因爲我知道像Fortran這樣的MATLAB以主要的列格式保存數據在內存中http://en.wikipedia.org/wiki/Row-major_order#Column-major_order,但仍然認爲它可以以某種方式更快地轉換爲矢量 – tim
@bjoern我認爲沒有辦法解決在內存中交換元素的需要。 – Shai