2016-09-07 1 views
0

저는 fortran을 사용 중이며 루프를 실행하지 않고 행렬의 항목이 특정 조건과 일치하는지 확인하는 방법을 찾고자합니다.루프를 실행하지 않고 상태를 확인하기위한 Fortran 명령

4 차원 행렬 매트 (:, :, :, :)가 있고이 행렬의 항목이 임계 값 V보다 작은 지 확인하고 싶습니다. 특정 항목이 V보다 작 으면 0으로 설정합니다.

for 루프를 실행하면이 작업을 수행 할 수 있지만 4D 매트릭스의 경우 너무 많은 시간이 걸리는 것으로 알고 있습니다.

감사합니다.

+0

가 어떤 구조에서 참조하시기 바랍니다 :

where(mat <= V) mat = 0 

이 예제를 참조하십시오 . – albert

+3

'where' 문은이 코드를 한 줄의 코드로 쉽게 (아마) 수행 할 수 있지만, 속도가 크게 향상 될 것이라고는 상상할 수 없습니다. 낮은 수준에서 조건부 테스트를 수행하고 여러 요소를 설정하는 경우 사용자 또는 컴파일러가 루프를 작성하는지 여부는 중요하지 않습니다. – francescalus

+0

MAxVAL 및 MINVAL에 대한 @francescalus와 같은 대답입니다. 첫 번째 값이 임계 값을 초과하면 루프에서 시간이 많이 걸리지 않습니다 ... – Holmz

답변

0

궁극적으로 프로그램은이 임계 값에 대해 4D 행렬의 모든 값을 확인해야합니다.

그러나 루프를 사용할 필요가 없습니다, 당신은 한 줄이를 작성할 수 있습니다

program where_test 

    implicit none 
    real, dimension(2, 2, 2, 2) :: mat 
    real, parameter :: V = 0.2 
    integer :: i 

    mat = reshape([(i * 0.05, i=1, 16)], [2, 2, 2, 2]) 
    print *, mat 
    where (mat <= V) mat = 0.0 
    print *, mat 

end program where_test 
관련 문제