我有一个包含整数的长矢量(长度:230 400,int8),我将其重新排列成一个三维矩阵(行数:240,列数:320,深度:3)。完成后,新矩阵包含双精度而不是整数(根据Matlab工作空间)。
整个操作需要0.3秒,这对我的目的来说很长。
Matlab是否将数组中的int转换为双精度数,然后再将它们放入矩阵中? 可以避免加速吗?
一些代码:
tic;
A=zeros(240,320,3);
%A is matrix, B is vector.
for i=1:240
for j=1:320
A(i,j,:)=B(1+(j-1)*3+(i-1)*320*3:3+(j-1)*3+(i-1)*320*3);
end
end
toc;
谢谢!
答案 0 :(得分:7)
只需在B上使用重塑。这样更快,并且会保留B类。
A = reshape(B,[3,320,240]); %# makes a 3-by-320-by-240 array and distributes elements of B
A = permute(A,[3 2 1]); %# turns A into a 240-by-320-by-3 array
答案 1 :(得分:2)
尝试使用
初始化矩阵A=zeros(240, 320, 3, 'int8')