可以说我有矩阵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循环的版本。
我一点都不了解matlab,但是根据我的研究,这应该可以工作:C = A * B,然后是result = sum(C(:))。 这会给您想要的结果吗? 来源:tutorialspoint.com/matlab/matlab_matrix_multiplication.htm,mathworks.com/matlabcentral/newsreader/view_thread/51252
根据您的更新,@ jodags答案是正确的。 C = A * B等效于您的matlab代码。
我只是在评论中尝试了我的建议,似乎可以使用此八度测试仪:
简短格式(仅适用于八度)
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
资料来源:
https://www.tutorialspoint.com/matlab/matlab_matrix_multiplication.htm
https://www.mathworks.com/matlabcentral/newsreader/view_thread/51252
根据您的更新进行更新:
A * B的输出:
8 5
20 13
您的代码输出:
8 5
20 13
简短格式在Matlab中不起作用,仅在Octav中有效
我不明白这如何回答问题。 问题是要求矩阵结果,答案是标量。
在问题中,他说他想得到"求和矩阵的总和",所以最后一步是求出给定马蒂奇乘积的和。 也许我误读了原始帖子?
也许我是盲目的,但我看不到"给定马蒂奇积的总和"只是给定矩阵之和。
看起来
C = zeros(size(A));
for i = 1 : size(A, 1)
C = C + A(:, i) * B(i, :);
end
等价于矩阵乘法
C = A*B
用于方阵A和B。
同意 如果它们遵循线性代数规则,这也适用于其他维度:矩阵A和B的内部维度相同(即,当A中的列数与B中的行数匹配时; size(A,2)==size(B,1)时)。
您也可以在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;
正如乔达格指出的。
如果您遵循线性代数的规则,则矩阵的内部尺寸是相同的(例如,当A中的列数与B中的行数匹配时; size(A,2)==size(B,1)),则此作品有效。