Модуль коллекций Python предоставляет класс под названием deque, специально разработанный для обеспечения быстрых и эффективных способов добавления и извлечения элементов с обоих концов базовой структуры данных. Двухсторонняя очередь Python (collections.deque) - это низкоуровневая и высокооптимизированная двусторонняя очередь, которая полезна для реализации элегантных, эффективных очередей и стеков Pythonic, которые являются наиболее распространенными типами данных, подобными спискам, в вычислениях.
(.env) boris@boris-All-Series:~/FIFOTORCH$ cat fifoPyTorch1.py
import time
import torch
from collections import deque
length = 5000
queue = deque([0]*200)
ten = torch.tensor(queue)
s = time.time()
for i in range(length):
for j in range(200):
queue.pop()
queue.appendleft(j*10)
torch.tensor(queue)
# after some appending/popping elements, cast to tensor
print("finish deque:", time.time()-s)
s = time.time()
for i in range(length):
for j in range(200):
newelem = torch.tensor([j*10])
ten = torch.cat((ten[1:], newelem))
#using tensor as FIFO, no need to cast to tensor
print("finish tensor:", time.time()-s)
(.env) boris@boris-All-Series:~/FIFOTORCH$ python3 fifoPyTorch1.py
finish deque: 0.1758899688720703
finish tensor: 11.722903728485107
При length = 10 тестируем код
(.env) boris@boris-All-Series:~/FIFOTORCH$ cat fifoPyTorch2.py
import time
import torch
from collections import deque
length = 10
queue = deque([0]*200)
ten = torch.tensor(queue)
s = time.time()
for i in range(length):
for j in range(200):
queue.pop()
queue.appendleft(j*10)
torch.tensor(queue)
print(torch.tensor(queue))
# after some appending/popping elements, cast to tensor
print("finish deque:", time.time()-s)
s = time.time()
for i in range(length):
for j in range(200):
newelem = torch.tensor([j*10])
ten = torch.cat((ten[1:], newelem))
#using tensor as FIFO, no need to cast to tensor
print(ten)
print("finish tensor:", time.time()-s)
(.env) boris@boris-All-Series:~/FIFOTORCH$ python3 fifoPyTorch2.py
tensor([1990, 1980, 1970, 1960, 1950, 1940, 1930, 1920, 1910, 1900, 1890, 1880,
1870, 1860, 1850, 1840, 1830, 1820, 1810, 1800, 1790, 1780, 1770, 1760,
1750, 1740, 1730, 1720, 1710, 1700, 1690, 1680, 1670, 1660, 1650, 1640,
1630, 1620, 1610, 1600, 1590, 1580, 1570, 1560, 1550, 1540, 1530, 1520,
1510, 1500, 1490, 1480, 1470, 1460, 1450, 1440, 1430, 1420, 1410, 1400,
1390, 1380, 1370, 1360, 1350, 1340, 1330, 1320, 1310, 1300, 1290, 1280,
1270, 1260, 1250, 1240, 1230, 1220, 1210, 1200, 1190, 1180, 1170, 1160,
1150, 1140, 1130, 1120, 1110, 1100, 1090, 1080, 1070, 1060, 1050, 1040,
1030, 1020, 1010, 1000, 990, 980, 970, 960, 950, 940, 930, 920,
910, 900, 890, 880, 870, 860, 850, 840, 830, 820, 810, 800,
790, 780, 770, 760, 750, 740, 730, 720, 710, 700, 690, 680,
670, 660, 650, 640, 630, 620, 610, 600, 590, 580, 570, 560,
550, 540, 530, 520, 510, 500, 490, 480, 470, 460, 450, 440,
430, 420, 410, 400, 390, 380, 370, 360, 350, 340, 330, 320,
310, 300, 290, 280, 270, 260, 250, 240, 230, 220, 210, 200,
190, 180, 170, 160, 150, 140, 130, 120, 110, 100, 90, 80,
70, 60, 50, 40, 30, 20, 10, 0])
finish deque: 0.0010824203491210938
tensor([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110,
120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230,
240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350,
360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 460, 470,
480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590,
600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, 710,
720, 730, 740, 750, 760, 770, 780, 790, 800, 810, 820, 830,
840, 850, 860, 870, 880, 890, 900, 910, 920, 930, 940, 950,
960, 970, 980, 990, 1000, 1010, 1020, 1030, 1040, 1050, 1060, 1070,
1080, 1090, 1100, 1110, 1120, 1130, 1140, 1150, 1160, 1170, 1180, 1190,
1200, 1210, 1220, 1230, 1240, 1250, 1260, 1270, 1280, 1290, 1300, 1310,
1320, 1330, 1340, 1350, 1360, 1370, 1380, 1390, 1400, 1410, 1420, 1430,
1440, 1450, 1460, 1470, 1480, 1490, 1500, 1510, 1520, 1530, 1540, 1550,
1560, 1570, 1580, 1590, 1600, 1610, 1620, 1630, 1640, 1650, 1660, 1670,
1680, 1690, 1700, 1710, 1720, 1730, 1740, 1750, 1760, 1770, 1780, 1790,
1800, 1810, 1820, 1830, 1840, 1850, 1860, 1870, 1880, 1890, 1900, 1910,
1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990])
finish tensor: 0.024991273880004883
No comments:
Post a Comment