matlab中的矩阵求和(带扭曲)

matlab中的矩阵求和(带扭曲),matlab,matrix,sum,Matlab,Matrix,Sum,我有一个矩阵H,为了参数起见,它的大小是6×6 我需要求和三件事,首先我需要h_ii,然后我需要求和包含元素I的所有其他元素,除了h_ii。然后我需要所有其他不包含j的文件 为了将其可视化,我们创建了以下图表 从图表上看 对于矩阵的每个对角线,h11,h22h66 我需要将橙色(包含所有ij单元格的单元格)和黄色(不包含I的单元格,jj单元格)相加 我试图对各个列和行求和,但这变得非常混乱 理想情况下,我需要给出矩阵,它产生h11=X,h11_橙色=Y,和h11_黄色=Z,h=magic(6)

我有一个矩阵
H
,为了参数起见,它的大小是6×6

我需要求和三件事,首先我需要
h_ii
,然后我需要求和包含元素
I
的所有其他元素,除了
h_ii
。然后我需要所有其他不包含
j
的文件

为了将其可视化,我们创建了以下图表

从图表上看

对于矩阵的每个对角线,
h11
h22
<代码>h66

我需要将橙色(包含所有
ij
单元格的单元格)和黄色(不包含
I
的单元格,
jj
单元格)相加

我试图对各个列和行求和,但这变得非常混乱

理想情况下,我需要给出矩阵,它产生
h11=X
h11_橙色=Y
,和
h11_黄色=Z
h=magic(6);
out=零(大小(h,1),大小(h,2),3);%初始化输出
out(:,:,1)=h;%复制绿色
对于ii=1:尺寸(h,1)
对于jj=1:尺寸(h,2)
%out(ii,jj,1)=h(ii,jj);%绿色钻头
%对于橙色,对行和列求和。注意“转置,
%否则,加号上的隐式广播将创建一个矩阵。
%最后两次移除绿色电池,
%当您在行和列中添加它时
out(ii,jj,2)=和(h(ii,:)+h(:,jj)。'-h(ii,jj)*2;
%把黄色加起来,再减去橙色和绿色
out(ii,jj,3)=和(h,'all')-out(ii,jj,2)-h(ii,jj)
结束
结束
这将生成一个3D输出矩阵,即它与输入矩阵大小相同,绿色、橙色和黄色部分有3页。请参阅代码中的注释,了解什么起作用


感谢您提高黄色总和的速度。

您可以使用此矢量化版本:

green = diag(H);
orange = sum(H,1).' + sum(H,2) - 2* green;
yellow = sum(H(:)) - orange - green;

我想你需要
-2*绿色
橙色
中,否则它会太
棕色
:我想你可以很容易地将其扩展为非对角元素<代码>绿色=H;橙色=和(H,1)+和(H,2)-2*绿色,在加号上使用隐式广播。这是一个比我更好更快的解决方案,应该被IMO接受。我认为@Defirr的评论应该被接受。因为我提供了很好的建议,纠正了我的错误。这是用幽默的语言写的,我认为我们需要这样的语言,特别是在流感大流行期间!