Преобразование вложенных циклов в векторизованную форму для оценки функции при использовании 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]