【发布时间】:2014-02-07 02:37:50
【问题描述】:
我有一个 NxN 相似矩阵,我需要将其重塑为 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 循环,因为我的矩阵相当大。我一直在努力重塑和 bsxfun,但可以让它发挥作用。 任何帮助将不胜感激。
【问题讨论】:
-
实际上在以某种方式询问后,我也弄清楚了。我也会发布它。它在 N>5000 时稍快(在我的机器上),但不如 chappjc 解决方案优雅: tmp = bsxfun(@times,1:N, one(N,1)); tmp = tmp(:); s = [tmp, repmat([1:N]',N,1), reshape(x',[],1)];
标签: matlab matrix vectorization reshape