将嵌套的for循环转换为矢量形式,以使用numpy评估函数

时间:2018-09-20 02:01:22

标签: python-3.x numpy image-processing numpy-broadcasting

我有如下定义的类似问题,如何在这里使用向量化而不是嵌套循环?

func在下面 和arr1ar1分别是ft1ft2

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 个答案:

答案 0 :(得分:0)

您可以这样写它-

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

编辑-上面的代码将对func(arr,ar)进行两次评估。 试试这个吧-

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