2016-09-07 3 views
0

Я использую fortran и хотел бы найти способ проверить, соответствуют ли записи матрицы определенному условию, без запуска цикла.Команда Fortran для проверки состояния без цикла цикла

Предположим, что существует матрица с четырьмя матрицами (:,:,:, :), и я хочу проверить, меньше ли элементов этой матрицы, чем пороговое значение V. Если определенная запись меньше V, тогда I 'установите его на ноль.

Я знаю, что это можно сделать, запустив for-loop, но это кажется слишком трудоемким для 4D-матрицы.

спасибо.

+0

Пожалуйста, посмотрите на ЛЮБОЙ конструкции , – albert

+3

Оператор 'where' может легко сделать это как одну строку кода (возможно), но я не могу себе представить, что вы будете смотреть на значительное увеличение скорости. На низком уровне, если вы выполняете условный тест и устанавливаете множество элементов, неважно, будете ли вы или компилятор писать цикл. – francescalus

+0

Тот же ответ, что и @francescalus для MAxVAL и MINVAL. Это не занимает много времени в цикле, если первое значение превышает пороговое значение ... – Holmz

ответ

0

В конечном итоге программе необходимо будет проверить каждое значение в матрице 4D на этот порог.

Однако, вы не должны использовать цикл, вы можете написать в одной строке:

where(mat <= V) mat = 0 

Смотрите этот пример:

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 

 Смежные вопросы

  • Нет связанных вопросов^_^