2012-10-13 5 views
1

행렬의 모든 요소를 ​​전달할 수 있다는 것을 알고 있습니다.조건이있는 Matlab 다중 행렬

하지만 다른 옵션이있을 수 있습니다.

내가하고 싶은 :

mat1 = mat2 * mat1; 

음수이거나 255보다 큰에 될 MAT1의 각 요소는, 내가 이전 요소를 마칠.

예를 들어

(결과이는 예를 들어 아니라, 사실이 아니다) :

mat1 = [10 25 12 
     33 7 163 
     232 13 77] 

mat2 = [-1 2 -3 
     4 -5 6 
     -7 -8 9] 

asume MAT1 = mat2 * MAT1을 제공합니다

mat1 = [-77.32 59 298 
     0  -33 12 
     -600  256 80] 

그래서 난에 MAT1를 복구 할 :

답변

5

, 당신은 행렬 곱셈을

최저는 교체 할 어디 0이 아닌 사람과

idx = (mat3 < 0 | mat3 > 255) 

당신과 함께 세 번째 매트릭스

mat3 = mat2 * mat1 

에서 행렬을 행렬 곱셈 결과를 저장하는 것입니다. MAT1

mat3(idx) = mat1(idx) 

결과의 값 mat3의 값을 대체하기 위해이 인덱스를 적용하여 0보다 작거나 255보다 큰 모든 요소 MAT1의 값으로 치환되어있는 행렬이다.

2

나는 매트릭스를 곱한 다음 결과를 "고정하는"것이 최선의 선택이라고 생각합니다. 여기에 이유 :

  1. 당신은 당신이 그것을 유지하려는 여부
  2. matlab에 프리폼 그래서 간단하게 갈 것

을 정말 빨리 곱셈 행렬 알고 제품 매트릭스의 각 셀을 계산해야 : 내가 제대로 이해하면

prod = mat1 * mat2 
mask = (prod < 0) | (prod > 255) 
prod(mask) = mat1(mask) 
+0

나는 이것이 틀렸다고 생각합니다. mask는 라인 2를 실행 한 후에 모두 0입니다. 여러분은 곱셈이 아니라'|'가 필요합니다. – angainor