繁体   English   中英

Matlab中将向量转换为对称空心矩阵

[英]Convert a vector to a symmetric hollow matrix in Matlab

我想将向量转换为对称空心矩阵,但我对 Matlab 不是很熟悉。

例如:

r2 = randi(10,276,1);

在此处输入图像描述

并将其转换为对称的空心矩阵,即关于零对角线的对称矩阵(有关所需结果,请参见下图)。 output 矩阵应该是 24x24 (276+276+24(zeros))

在此处输入图像描述

感谢您的帮助!

您可以通过遍历行和列并粘贴所需的 r2 元素来获得空心矩阵。 最简单的是跟踪你在 r2 中的位置,就像你 go 一样。我敢肯定,如果你需要的话,可以用三角数进行一些直接计算来直接获取 r2Slice 索引。

r2 = randi(10,276,1);

% 1 + inverse triangular number formula
numrows = 1+sqrt(2.*numel(r2)+1/4)-1/2;
mat = zeros(numrows);

firstelement = 1;
lastelement = numrows-1;
for i = 1:numrows-1
    r2Slice = r2(firstelement:lastelement);
    mat(i,i+1:end) = r2Slice';
    mat(i+1:end,i) = r2Slice;
    firstelement = lastelement+1;
    lastelement = lastelement+numrows-1-i;
end

编辑:因为我想不通,下面是直接计算索引的版本:

r2 = randi(10,276,1);

% triangular number formulas
triang = @(x)x.*(x+1)./2;
inv_triang = @(x)sqrt(2.*x+1/4)-1/2;

numrows = 1+inv_triang(numel(r2));
mat = zeros(numrows);

firstelement = @(i)triang(numrows-1)-triang(numrows-1-i+1)+1;
lastelement = @(i)firstelement(i)+numrows-1-i;

for i = 1:numrows-1
    r2Slice = r2(firstelement(i):lastelement(i));
    mat(i,i+1:end) = r2Slice';
    mat(i+1:end,i) = r2Slice;
end

尝试这个:

r2 = randi(10,24);
r2 = (r2+r2')./2; % make matrix symmetric by adding transpose and divide by 2
r2 = r2 - diag(diag(r2)); % subtract diagonal matrix with diagonal from r2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM