【发布时间】:2017-01-04 07:08:11
【问题描述】:
我有一个 2 x 2 矩阵 A = rand(2,2)。
我有一个维度为 2 x 2 x 5 的 3d 数组。
叫它T 这样
T(:,:,1) = [1 2;3 4];
T(:,:,2) = [5 6;7 8];
T(:,:,3) = [12 11;10 9];
T(:,:,4) = [13 15;17 19];
T(:,:,5) = [21 22;23 28];
如何进行
的操作J=zeros(2);
K=zeros(2);
for i = 1:5
J = J + T(:,:,i)'*A*T(:,:,i);
K = K + T(:,:,i)'*T(:,:,i);
end
以最快的方式通过矢量化。我想这样做是因为 3d 数组的维度通常非常大。
【问题讨论】:
-
我不认为这些操作可以进一步向量化。只要确保为结果预先分配内存
J=zeros(size(T));并运行J(:,:,i) = T(:,:,i)'*A*T(:,:,i);如果矩阵大小很大,因此循环的每次迭代都需要大量时间,任何进一步的向量化可能不会使更快地编码 -
@Airidas Korolkovas 将它们相加怎么样?
-
也许你可以通过使用 mtimesx 例程获得一点额外的速度:fr.mathworks.com/matlabcentral/fileexchange/…
-
请注意,通常“矢量化”=“以更多内存为代价更快”。因此,要么您想以矢量化方式执行此操作,这可能更快,但内存密集度更高,或您希望以内存有效的方式执行此操作(您已经是这样了)。
标签: matlab vectorization matrix-multiplication