tim*_*tim 7 matlab row vector matrix reshape
如何有效地将矩阵转换为行向量.例:
>> a = [1 2; 3 4]
a =
1 2
3 4
Run Code Online (Sandbox Code Playgroud)
该(:)符号给我:
>> a(:)
ans =
1
3
2
4
Run Code Online (Sandbox Code Playgroud)
但我希望得到这样的结果:
>> b = a'; b(:)
ans =
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
换位和附加的var-assignment使得它慢得多.我可以通过重塑这样的方式完成任务:
>> reshape(a',4,1)
ans =
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
这比前一个快一点,见板凳:
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
Run Code Online (Sandbox Code Playgroud)
如果我离开转置它会非常快,(:)语法将快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
Run Code Online (Sandbox Code Playgroud)
这就是为什么我问是否有这样一个很好的语法,(:)但要将它按行排序到矢量!?谢谢
想想元素在内存中是如何组织的。它们的“自然”顺序是按列排列的。因此A(:),只需更改矩阵的标头,而无需更改存储元素本身的存储器中的任何内容。但是,当您转置 时A,您需要重新排列内存中的元素(复制和交换),这需要时间。
| 归档时间: |
|
| 查看次数: |
9667 次 |
| 最近记录: |