我想刪除下列矩陣的對角線;Matlab:從矩陣中刪除對角線並改寫
[0 1 1
0 0 0
0 1 0]
,並把它放進一個向量作爲這樣
[1 1 0 0 0 1]
有一個單向函數來做到這一點? 我在堆棧溢出中找到的大多數其他解決方案都會刪除全零。
我想刪除下列矩陣的對角線;Matlab:從矩陣中刪除對角線並改寫
[0 1 1
0 0 0
0 1 0]
,並把它放進一個向量作爲這樣
[1 1 0 0 0 1]
有一個單向函數來做到這一點? 我在堆棧溢出中找到的大多數其他解決方案都會刪除全零。
如果兩條線都很好...
x = x.'; %'// transpose because you want to work along 2nd dimension first
result = x(~eye(size(x))).'; %'// index with logical mask to remove diagonal
這裏是一個幾乎有襯墊 -
[m,n] = size(x);
x(setdiff(reshape(reshape(1:numel(x),m,n).',1,[]),1:m+1:numel(x),'stable'))
而且我會把我的最愛bsxfun
這裏 -
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
它總是會是一個矩形矩陣或可以維度不同嗎? –