#arrays #python-3.x #numpy #numpy-slicing
Вопрос:
Я пытался понять назначение значений срезам NumPy
массивов. В частности, если срезанные задания выполняются медленнее, чем «менее срезанные» задания.
Пример:
a[0,:10] = 5
vs
a[0:1,:10] = 5
Это непреднамеренно привело меня к ситуации, когда я пытался сравнить
a[:,:] = a[:,:] 1
vs
a = a 1
Я не смог понять результатов
Случай 1: Создание массива находится вне цикла
b=np.arange(100000000).reshape(-1,100).astype(np.float64)
out = []
for i in range(50):
ti1 = time.time()
b = b 1
tf1 = time.time()
tt1 = tf1 - ti1
ti2 = time.time()
b[:,:] = b[:,:] 1
tf2 = time.time()
tt2 = tf2 - ti2
out.append((tt1,tt2))
print(len(list(filter(lambda x: x[0] > x[1], out))))
выход:
22
СЛУЧАЙ 2 : Создание массива происходит внутри цикла
out1 = []
for i in range(50):
b=np.arange(100000000).reshape(-1,100).astype(np.float64)
ti1 = time.time()
b = b 1
tf1 = time.time()
tt1 = tf1 - ti1
ti2 = time.time()
b[:,:] = b[:,:] 1
tf2 = time.time()
tt2 = tf2 - ti2
out1.append((tt1,tt2))
print(len(list(filter(lambda x: x[0] > x[1], out1))))
выход:
0
Похоже, что первый раз после создания массива b = b 1
обязательно занимает меньше времени, чем b[:,:] = b[:,:] 1
- Почему это так?
- Какие изменения произошли после
b = b 1
иb[:,:] = b[:,:] 1
были запущены один раз, что теперь они оба занимают примерно одинаковое количество времени?