Преобразование вложенных циклов в векторизованную форму для оценки функции при использовании numpy

У меня похожая проблема, как определено ниже, как я могу использовать здесь векторизацию вместо вложенных циклов?

func ниже и arr1 а также ar1 являются ft1 а также ft2 соответственно.

skimage.measure.compare_ssim(ft1, ft2, 
    win_size=FEATURE_SSIM_WIN, K1=FEATURE_SSIM_K, K2=FEATURE_SSIM_K)`


lis =[]
array1 = np.array([arr1, arr2, arr3])
array2 = np.array([ar1, ar2, ar3])
for arr in array1:
    for ar in array2:
        val = func(arr, ar)
        if val > 1: #can be any integer at place of 1.
            lis.append(val)`

1 ответ

Вы можете написать это как-то так -

lis = [ func(arr, ar)  for arr in array1 for ar in array2 if func(arr, ar) >1 ]

Edit - приведенный выше код будет оценивать func(arr,ar) дважды. Попробуйте это вместо

lis = [ func(arr, ar)  for arr in array1 for ar in array2 ]
lis = [ val for val in lis if val >1]
Другие вопросы по тегам