Мне кажется, я понимаю, что вы пытаетесь сделать.Я понятия не имею об относительной производительности наших двух машин, так что, может быть, вы сможете сами протестировать ее.
from PIL import Image
import numpy as np
# Load images, convert to RGB, then to numpy arrays and ravel into long, flat things
a=np.array(Image.open('a.png').convert('RGB')).ravel()
b=np.array(Image.open('b.png').convert('RGB')).ravel()
# Calculate the sum of the absolute differences divided by number of elements
MAE = np.sum(np.abs(np.subtract(a,b,dtype=np.float))) / a.shape[0]
Единственная «хитрая» вещь - это принуждение типа результата np.subtract()
кfloat, который гарантирует, что я могу хранить отрицательные числа.Возможно, стоит попробовать dtype=np.int16
на вашем оборудовании, чтобы проверить, не быстрее ли это.
Быстрый способ его тестирования заключается в следующем.Запустите ipython
, а затем введите следующее:
from PIL import Image
import numpy as np
a=np.array(Image.open('a.png').convert('RGB')).ravel()
b=np.array(Image.open('b.png').convert('RGB')).ravel()
Теперь вы можете рассчитать мой код с помощью:
%timeit np.sum(np.abs(np.subtract(a,b,dtype=np.float))) / a.shape[0]
6.72 µs ± 21.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Или вы можете попробовать версию int16
следующим образом:
%timeit np.sum(np.abs(np.subtract(a,b,dtype=np.int16))) / a.shape[0]
6.43 µs ± 30.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Если вы хотите определить время своего кода, вставьте его в функцию, затем используйте:
%timeit compare_images_pil(img1, img2)