MATLAB:点积矩阵
MATLAB: Matrix of dot products
我有两个矩阵,大小为 800E3x45
的 X
和大小为 45x35
的 W
。如何创建大小为 800E3x35
的矩阵,其中每个条目都是 X
行和 W
列的点积?
也许这不是阅读和理解代码的最佳方式,但您可以使用下一个公式在矢量化视图中做到这一点:
res = cell2mat( arrayfun(@(y) arrayfun( @(x) dot( X(y,:), W(:,x)), 1:size(W,2)), ...
(1:size(X,1))', 'UniformOutput', false) )
解释:
- 我们需要取
dot( X(y,:), W(:x))
- 对于 X 的每一行(y 表示行号)我们对 W 的所有列取点(x 是 W 的列)
- 使用
arrayfun
(内部)获取W 的每一列
- 使用
arrayfun
(外部)获取 X 的每一行。
- 我们在元胞数组中得到结果,所以让我们将其转换为数字矩阵 - 使用 `cell2mat'
P.S。我认为可以有更优雅的解决方案,smth 使用 bsxfun
但这是我能想到的第一个。
我有两个矩阵,大小为 800E3x45
的 X
和大小为 45x35
的 W
。如何创建大小为 800E3x35
的矩阵,其中每个条目都是 X
行和 W
列的点积?
也许这不是阅读和理解代码的最佳方式,但您可以使用下一个公式在矢量化视图中做到这一点:
res = cell2mat( arrayfun(@(y) arrayfun( @(x) dot( X(y,:), W(:,x)), 1:size(W,2)), ...
(1:size(X,1))', 'UniformOutput', false) )
解释:
- 我们需要取
dot( X(y,:), W(:x))
- 对于 X 的每一行(y 表示行号)我们对 W 的所有列取点(x 是 W 的列) - 使用
arrayfun
(内部)获取W 的每一列
- 使用
arrayfun
(外部)获取 X 的每一行。 - 我们在元胞数组中得到结果,所以让我们将其转换为数字矩阵 - 使用 `cell2mat'
P.S。我认为可以有更优雅的解决方案,smth 使用 bsxfun
但这是我能想到的第一个。