2015-07-10 66 views

回答

1
A(:,sum(abs(diff(A)))>0,1) 

「保持列,其中的差別大於零」

+0

比我的方式簡單:) –

+1

如果'A = [1 2 3]'或'A = [1 2 3; 2 3 3]'。 – Justin

+0

好點。我同意。 – ntough

0

如何:

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)) = [] 
+0

不正確的,如果'A = [1 2 3]'。 – Justin

+0

@jucestain如果只有一行,你會想到「正確」的結果? –

+0

每列中的每個元素都是相同的,所以它應該返回一個空向量。這被稱爲平等運算符的自反屬性。 – Justin

1

無論是發佈的答案是不正確的。測試邊緣的情況下A只具有1個或2行:

即:

A = [1 2 3]; 

或:

A = [1 2 3; 
    2 3 3]; 

diffany需要以正確的尺寸來提供:

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)) = [] 
+0

感謝您提到這個特定的情況。然而,在我的任務中,輸入矩陣總是會有多行,因爲如果它只有一行,它將不會有一個具有所有相同元素的列。 – ntough

+0

對於兩行的情況,接受的答案仍然是錯誤的。 'A = [1 2 3; 2 3 3]' – Justin

相關問題