我想移除以下矩阵的对角线:
把这个放入一个向量中,如下所示:
[0 1 1
0 0 0
0 1 0]
把这个放入一个向量中,如下所示:
[1 1 0 0 0 1]
是否有一种单向函数可以实现这个功能?我在 Stack Overflow 上找到的大多数解决方案都会删除所有零。
x = x.'; %'// transpose because you want to work along 2nd dimension first
result = x(~eye(size(x))).'; %'// index with logical mask to remove diagonal
~eye
好像在原始的x
上生成了一个掩码。第二行代码是否使用列主序中的线性索引? - Adriaan~eye(size(x))
索引会返回列主序。第二个转置是因为 OP 想要一个行向量,而逻辑掩码返回的是列向量。 - IKavanagh[m,n] = size(x);
x(setdiff(reshape(reshape(1:numel(x),m,n).',1,[]),1:m+1:numel(x),'stable'))
我会在这里放上我最喜欢的favbsxfun
-
xt = x.'; %//'
[m,n] = size(x);
out = xt(bsxfun(@ne,(1:n)',1:m)).'
样例运行 -
>> x
x =
52 62 37 88
23 68 98 91
49 40 4 79
>> [m,n] = size(x);
>> x(setdiff(reshape(reshape(1:numel(x),m,n).',1,[]),1:m+1:numel(x),'stable'))
ans =
62 37 88 23 98 91 49 40 79
>> xt = x.';
>> xt(bsxfun(@ne,(1:n)',1:m)).'
ans =
62 37 88 23 98 91 49 40 79