假設輸入是:如何刪除matlab中所有相同元素的列?
[1 2 3;
2 3 3;
3 4 3;
3 5 3;]
預期輸出將是:
[1 2;
2 3;
3 4;
3 5;]
的理由刪除第三列是因爲在第三列中的所有元素是相同的。有沒有默認的matlab函數呢?
假設輸入是:如何刪除matlab中所有相同元素的列?
[1 2 3;
2 3 3;
3 4 3;
3 5 3;]
預期輸出將是:
[1 2;
2 3;
3 4;
3 5;]
的理由刪除第三列是因爲在第三列中的所有元素是相同的。有沒有默認的matlab函數呢?
A(:,sum(abs(diff(A)))>0,1)
「保持列,其中的差別大於零」
如何:
A =
1 2 3
2 3 3
3 4 3
3 5 3
B = A==repmat(A(1,:),size(A,1),1)
B =
1 1 1
0 0 1
0 0 1
0 0 1
C = sum(B) == size(A,1)
C =
0 0 1
A(:,C) =[]
A =
1 2
2 3
3 4
3 5
在一個行:
A(:, sum(A==repmat(A(1,:),size(A,1),1)) == size(A,1)) = []
無論是發佈的答案是不正確的。測試邊緣的情況下A
只具有1個或2行:
即:
A = [1 2 3];
或:
A = [1 2 3;
2 3 3];
diff
和any
需要以正確的尺寸來提供:
A = A(:,any(diff(A,1,1),1));
此輸出:
A = [1 2 3; 2 3 3];
EDU>> A(:,any(diff(A,1,1),1))
ans =
1 2
2 3
和
A = [1 2 3]
EDU>> A(:,any(diff(A,1,1),1))
ans =
Empty matrix: 1-by-0
另外,IMO此,語義,最有意義:
A(:,all(bsxfun(@eq,A,A(1,:)),1)) = []
比我的方式簡單:) –
如果'A = [1 2 3]'或'A = [1 2 3; 2 3 3]'。 – Justin
好點。我同意。 – ntough