Объяснение поведения времени операций с массивом Python numpyPython

Программы на Python
Anonymous
Объяснение поведения времени операций с массивом Python numpy

Сообщение Anonymous »

Если я запущу следующий код:

Код: Выделить всё

import numpy as np
from time import perf_counter as T
Shapes=[ (3,5), (30,50),  (300,500), (3000, 5000), (30000, 50000) ]
for shape in Shapes:
h,w = shape
a = np.arange(1,h*w+1,dtype=np.uint32).reshape(h,w)
sT=T()
b = np.flipud(np.fliplr(a.T).T)
eT=T(); dT=eT-sT; print(f"{dT:.6f}", flush=True)
Я получаю следующий результат (результаты могут сильно различаться, но увеличение времени для последних двух измерений времени, похоже, всегда имеет место):

Код: Выделить всё

0.000010
0.000008
0.000008
0.000072
0.000294
Может кто-нибудь объяснить подробно, как получается, что с увеличением размера массива работа с массивами не занимает больше времени?
Как это происходит? первые три измерения времени с массивами, увеличенными в 100 и 10 000 раз, находятся в одном и том же временном диапазоне, но время для массивов, увеличенных в 1000000 раз и в 100000000 раз, нет?
Было бы неплохо если вместе с этим объяснением будет подсказка, почему моя система Linux Mint 21.2 Xfce с 7,7 Ги памяти и файлом подкачки размером 2 ГБ зависает при многократном запуске этого кода с использованием Python 3.10 и numpy версии 1.26.4 и как избежать этого эффекта который, кажется, частично меняет свое направление в течение длительного времени.

Подробнее здесь: https://stackoverflow.com/questions/785 ... g-behavior

Вернуться в «Python»