gpt4 book ai didi

matlab - 高效计算外积的 3D 矩阵 - MATLAB

转载 作者:太空宇宙 更新时间:2023-11-03 19:30:32 25 4
gpt4 key购买 nike

假设我有一个这样的元素矩阵:

A = reshape(1:25, 5, 5)

A =

1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25

我想有效地计算外积的 3D 矩阵,这样输出矩阵的第 ith 切片是第 ith 列的外积A 本身。两个向量 uv 之间的外积就是 u*v.' 如果 u v 都是列向量。

因此,此输出矩阵 B 的每个切片的结构应如下:

B(:,:,1) = A(:,1) * A(:,1).';
B(:,:,2) = A(:,2) * A(:,2).';
...
...
B(:,:,5) = A(:,5) * A(:,5).';

我目前的方法如下。我尝试使用 arrayfuncell2mat 这样做:

cellmatr = arrayfun(@(x) A(:,x) * A(:,x).', 1:size(A,2), 'uni', 0);
out = reshape(cell2mat(cellmatr), size(A,1), size(A,1), size(A,2));

我简单地循环遍历 1 和我们在 A 中的列之间的线性索引数组,对于这个数组中的每个元素,我访问相应的列和计算外积。因此,输出将提供一维单元格网格,然后我将其转换回二维矩阵,然后 reshape 为 3D 矩阵以找到外积的 3D 矩阵。

但是,对于大型矩阵,这是相当慢的。我还尝试在 arrayfun 中用 kron 替换矩阵乘积(即 kron(A(:,x), A(:,x))) 调用,但这对我的目的来说仍然很慢。


有谁知道以这种方式计算这个 3D 外积矩阵的有效方法吗?

最佳答案

这只是对 Divakar's answer 的一个小改进.它更快一点,因为它用 2D 数组置换替换了 3D 数组置换:

B = bsxfun(@times, permute(A, [1 3 2]), permute(A, [3 1 2]));

关于matlab - 高效计算外积的 3D 矩阵 - MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25877835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com