2016-07-16 1 views
3

매트릭스가 있고 매트릭스 내의 특정 조건을 만족하는 값을 변경하는 데 관심이 있습니다 (위치에 따라 다름). 매트릭스 smallpic이 있다고 가정 해보십시오. 첫 번째 두 열의 50을 초과하는 모든 값을 255로 변경하고 세 번째와 네 번째 열의 값을 180으로 변경 한 동일한 크기의 행렬 smallPicB는 어떻게 얻을 수 있습니까? 매트릭스의 특정 영역에있는 논리적 인덱스에 따라 일부 값을 변경합니다.

나는 작품이 코드를 가지고 있지만, 그것은 꽤 추한하고 매트릭스를 분할하고 다시 합치가 필요합니다

smallPic1=smallPic(:,1:2);smallPic1(smalllPic1>50)=255; 
smallPic2=smallPic(:,3:4);smallPic2(smalllPic2>50)=180; 

smallPicB = [smalllPic1 smalllPic2]; 

가 어떻게 하나의 명령에 스칼라 인덱스 논리적 인덱스를 결합 할 것인가? 이 smallPic와 같은 크기를 가지고 있지 않기 때문에 여기에

smallPic(:,smallPic(:,3:4)>50) = 180 

는 괄호 안에 smallPic의 두 번째 언급 smallPic의 올바른 위치에 색인을 허용하지 않습니다

은 무엇 작동하지 않는 것은 이것이다 . 따라서이 명령은 실제로 세 번째 및 네 번째 열의 값을 대체하는 대신 세 번째 및 네 번째 열에서 50보다 큰 값과 같은 행에있는 smallPic의 처음 두 열의 값을 대체합니다.

다른 제안 사항이 있으십니까?

+2

편집에 대한 이유 : 그래서 모든 멤버의 열 인덱스를 저장하는 J를 정의했습니다. – saastn

답변

2

그것은 아마 당신이 찾고있는 것이 아닙니다,하지만 당신은 그런 과제가 많이있는 경우가 도움이 될 수 있습니다 또한 ismember 함수를 호출 할 수 있습니다

J = repmat(1:size(smallPic, 2), size(smallPic, 1), 1) 
smallPic((J<3)&(smallPic>50))=255 
smallPic((J>2)&(J<5)&(smallPic>50))=180 

을 열 지수가 연속하지 않은 경우 :

smallPic(ismember(J, [[1:2 5:6]])&(smallPic>50))=255 
관련 문제