matlab - 将方阵 reshape 为没有对角线元素的 Nx3

标签 matlab matrix vectorization reshape

我有一个 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,但可以让它工作。 任何帮助将不胜感激。

最佳答案

使用 eye 的一种可能性和 find :

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/

相关文章:

r - 切换R中矩阵的列顺序

c++ - sse2 向量化和虚拟机

matlab - 修剪 mp4 文件而不再次编码

matlab - 计算 Matlab 中元胞数组的集并集

matlab - 在矩阵中保存不同大小的向量

c++ - C++ 中的图像模糊。矩阵拷贝的问题

arrays - 随机排列矩阵

android - 如何使用 libgdx 显示矢量化文本?

python - 在具有相同值的非零元素之间的numpy数组中填充零

python - 在 NumPy 中最优雅地实现 MATLAB 的 "vec"函数