2012-10-12 2 views
2
A=[1 2 3 4 5 0 0 0 0 0 0 0 0 0 0 0 0; 
    0 1 2 3 4 5 0 0 0 0 0 0 0 0 0 0 0; 
    0 0 0 1 2 3 4 5 0 0 0 0 0 0 0 0 0; 
    0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5; 
    0 0 0 0 0 0 0 1 2 3 4 5 0 0 0 0 0; 
    0 0 0 0 0 0 0 1 2 3 4 5 0 0 0 0 0]; 

만 1보다 큰 값 이하 4.특정 사례를 만족시키는 항목 수를 계산하는 방법은 무엇입니까?

노트이 요소가 열에 숫자 "1"을 계산하는 코드 란 : 0을 무시가.

따라서 예상 출력은 두 번째 열에있는 res = 1입니다. 여기

내가 뭘하려 :

res = sum(sum(A(2 :end,all(A>1&A<4))==1, 2),1); 

하지만 제로는 여전히 내 코드에서 계산되고있다.

+0

내가 원하는 것을 이해할 수 없다 ... 1보다 크고 4보다 작은 값만있는 열에서 1의 수가 항상 0이되지 않습니까? 당신이 포괄적이라는 것을 의미한다면, 당신의 예제에서 당신은 하나의 값을 가진 네 개의 서로 다른 컬럼을 갖게됩니다. 우리는 더 많은 정보가 필요합니다. – Sconibulus

+0

@xxbbcc 내 업데이트 된 게시물을보십시오 – engineering2008

+2

당신이 원하는 것이 아직 나에게 명확하지 않습니다. 1과 4 사이의 값 (1과 4는 포함하지 않음)이있는 열의 "1"수는 항상 0입니다! –

답변

1

내가 제대로 이해한다면, 당신은 이런 식으로 할 수있는 : A의 요소 내하지 첫 번째 규칙을 위반하는 모든 열을 찾아

시작을 초과하는 4

[~, del, ~] = find(A>=4)

그 열을 제거주는

A(:, unique(del)) = []

:

[~, c1, ~] = find(A == 1);

그리고 두 번째 요구 사항은 다음 1보다 적어도 하나의 값이 모든 열 :

[~, c2, ~] = find(A > 1)

A = 
1  2  3  0  0  0  0  0 
0  1  2  0  0  0  0  0 
0  0  0  0  0  0  0  0 
0  0  0  0  0  1  2  3 
0  0  0  2  3  0  0  0 
0  0  0  2  3  0  0  0 

이제 우리는 1이 남아있는 열을 찾을 수

이들 벡터 c1 및 그래서 아마도 당신이 조금 기다려야한다,

numel(intersect(c1, c2))

지금,이 포럼에 matlab에 마법사의 많음이 있고 나의 본능은 나에게 더 나은 응답이 이야기 : 열 번호 c2 우리는 단순히 교차와 계산 .

관련 문제