Матрица, содержащая целые числа вместо двойников в Matlab - PullRequest
1 голос
/ 22 января 2011

У меня есть большой вектор, содержащий целые числа (длина: 230 400, int8), которые я переставляю в трехмерную матрицу (строки: 240, столбцы: 320, глубина: 3).Когда это будет сделано, новая матрица будет содержать двойные числа вместо целых (в соответствии с рабочей областью Matlab).

Вся операция занимает 0,3 секунды, что слишком долго для моих целей.

Конвертирует ли Matlabчисло в массиве удваивается, прежде чем положить их в матрицу?Можно ли этого избежать, чтобы ускорить процесс?

Код:

   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;

Спасибо!

Ответы [ 2 ]

7 голосов
/ 22 января 2011

Просто используйте reshape на 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
2 голосов
/ 22 января 2011

Попробуйте инициализировать вашу матрицу с

A=zeros(240, 320, 3, 'int8')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...