我有一个 NxN 相似度矩阵,需要将其 reshape 为 N*N-N x 3 矩阵。 我删除了对角线上的所有值。 我目前为此工作的代码:
N=3;x=magic(N);
M=N*N-N;s=zeros(M,3);
j=1;
for i=1:N
for k=[1:i-1,i+1:N]
s(j,1)=i;
s(j,2)=k;
s(j,3)=x(i,k);
j=j+1;
end;
end;
因此对于这个例子来说,矩阵 s 是:
1 2 1
1 3 6
2 1 3
2 3 7
3 1 4
3 2 9
我想避免 for 循环,因为我的矩阵相当大。我一直在努力使用 reshape 和 bsxfun,但可以让它工作。 任何帮助将不胜感激。
最佳答案
N = 3; x = magic(N);
M = N*N-N;
s = zeros(M,3);
[s(:,2),s(:,1),s(:,3)] = find(~eye(N).*x.');
或者,使用 ndgrid
:
[ii,jj] = ndgrid(1:size(x,1),1:size(x,2));
m = ii~=jj;
s = [jj(m) ii(m) x(sub2ind(size(x),jj(m),ii(m)))]
关于matlab - 将方阵 reshape 为没有对角线元素的 Nx3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21191424/