在Matlab中包含整数而不是双精度的矩阵

Isa*_* T. 1 matlab

我有一个包含整数的大向量(长度: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;
Run Code Online (Sandbox Code Playgroud)

谢谢!

Jon*_*nas 7

只需在B上使用reshape.这样更快并且将保留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
Run Code Online (Sandbox Code Playgroud)

  • 学习使用reshape,permute和transpose来解决这类问题,而不是强力加倍嵌套循环.这是矢量化的艺术,你可以学习在没有显式循环的数组上操作. (5认同)