Почему scipy.distance.cdist имеет большую разницу в производительности между использованием float32 и float64?
from scipy.spatial import distance
import numpy as np
import time
a_float32 = np.empty((1000000, 512), dtype=np.float32)
b_float32 = np.empty((1, 512), dtype=np.float32)
a_float64 = np.empty((1000000, 512), dtype=np.float64)
b_float64 = np.empty((1, 512), dtype=np.float64)
t1 = time.time()
for i in range(100):
distance.cdist(a_float32, b_float32, "sqeuclidean")
t2 = time.time()
print(t2-t1)
t1 = time.time()
for i in range(100):
distance.cdist(a_float64, b_float64, 'sqeuclidean')
t2 = time.time()
print(t2-t1)
На моем компьютере этот код выдает временные значения 130.6998474597931 для float32 и 22.450339794158936 для float64, колоссальные 6xразница. В чем причина такой большой разницы в том, что float64 быстрее, чем float32?
Однако, как представляется, разрыв становится все меньше и меньше, если вместо b задано значение np.пусто ((1, 512)), b равно np.empty ((k, 512)), причем k (> 1) становится все больше и больше.Например, когда k = 5, я получаю 222.25975680351257 для float32 и 110.36117148399353 для float64 (2x). Почему разрыв становится меньше, когда k становится больше?