[英]Convert a vector to a symmetric hollow matrix in Matlab
您可以通过遍历行和列并粘贴所需的 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.