假设我有矩阵A = [1 2; 3 4], B = [4 3; 2 1]
。我想将矩阵A ([1; 3], [2; 4])
中的每一列乘以矩阵B ([4 3], [2 1])
中的相应行并对结果矩阵求和。我想出了以下代码:
C = zeros(size(A));
for i = 1 : size(A, 1)
C = C + A(:, i) * B(i, :);
end
是否可以使用某些数学技巧或matlab函数重写以摆脱for循环?
我发现我的问题对于我想要的结果是不明智的。结果应该完全模仿提供的Matlab代码,因此我寻找一个矩阵,该矩阵由中间矩阵的矩阵求和给出,该矩阵求和是通过将每个列向量与来自两个矩阵的相应行向量相乘而创建的。对于这个具体的例子,它将由
给出C = A(:, 1) * B(1, :) + A(:, 2) * B(2, :);
我只是在为任何兼容维度的矩阵寻找一些通用的for-loop less版本。
答案 0 :(得分:2)
我刚刚在评论中尝试了我的建议,似乎与octave tester合作:
简短形式(仅适用于Octave):
A = [1 2; 3 4], B = [4 3; 2 1]
X = sum((A * B)(:))
长篇(Matlab):
A = [1 2; 3 4]
B = [4 3; 2 1]
C = A * B % Stop here if you want the exact result from your Matlab code
x = sum(C(:)) % To get the sum of the resulting matrix
来源:
根据您的更新进行更新:
A * B
的输出:
8 5
20 13
输出您的代码:
8 5
20 13
答案 1 :(得分:0)
您也可以在MATLAB中执行此操作以获得总和。
C=ones(1,2)*A*B*ones(2,1)
一般表格是
C=ones(1,size(A,1))*(A*B)*ones(size(B,2),1);
修改强>
为了清晰起见,我看到您更新了问题。矩阵乘积可以直接计算
C = A*B;
正如jodag所指出的那样。
这项工作为您提供了遵循线性代数规则,其中矩阵的内部维度相同(即,当A中的列数与B中的行数相匹配时,size(A,2)==size(B,1)
)。
答案 2 :(得分:0)
似乎
C = zeros(size(A));
for i = 1 : size(A, 1)
C = C + A(:, i) * B(i, :);
end
相当于矩阵乘法
C = A*B
表示方形矩阵A
和B
。