Создание матрицы из диадных продукта


  • Ах, Ау, Аз: [N-на-N]
  • Б=АА (диадных товара)

значит

B(i,j)= [Ax(i,j);Ay(i,j);Az(i,j)]*[Ax(i,j) Ay(i,j) Az(i,j)] 

Б(я,J): матрицы 3х3.

Один из способов построения Б - это:

N=2;
Ax=rand(N); Ay=rand(N); Az=rand(N);
t=1;
F=zeros(3,3,N^2);
for  i=1:N
    for j=1:N
        F(:,:,t)= [Ax(i,j);Ay(i,j);Az(i,j)]*[Ax(i,j) Ay(i,j) Az(i,j)];
        t=t+1;      %# t is just a counter
    end
end
%# then we can write
B = mat2cell(F,3,3,ones(N^2,1));
B = reshape(B,N,N)'; 
B = cell2mat(B);

Есть более быстрый способ, чем этот, особенно когда Н большой?



Комментарии
1 ответ

Есть проблема с умножения вектора на вторую петлю. Вы должны перенести второй вектор перед выполнением умножения.

F(:,:,t)= [Ax(i,j);Ay(i,j);Az(i,j)]*[Ax(i,j) Ay(i,j) Az(i,j)]';

Одним из способов ускорить процесс является применение векторизации вместо двух на петли, например, с Dyadics.

2
ответ дан 21 декабря 2011 в 10:12 Источник Поделиться