Форум сайта python.su
В процессе вычислений получаются одномерные массивы numpy одной и той длины. Длина их при программировании не известна, зато известна перед началом вычислений. Их надо засовывать в буфер FIFO с заранее известной длиной, например 1000. При этом ещё надо извлекать из произвольного места буфера. Засовывать и читать надо быстро, без переписывания всего буфера и медленного поиска под ковром.
Офлайн
В припадке безумия сделал это:
#!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as np import scipy as sp import math l_fifo = 4 dim = 2 start = 0 l_fill = 0 fifo_res = np.full((l_fifo, dim), np.NaN) #push for i in range(9): x = np.array([1.0 + i, 2.0]) if l_fill >= l_fifo: start = start + 1 else: l_fill = l_fill + 1 let_pos = (start + l_fill - 1) % l_fifo fifo_res[let_pos, :] = x print start, l_fill print fifo_res print "---------------------------"
Отредактировано alien308 (Окт. 1, 2016 17:06:04)
Офлайн
alien308Интересно вам чем не нравитcя?.
Чем то это мне не нравится.
Офлайн
Глабальные переменные и print в пробном коде, конечно. Может использование list из numpy массивов позволит исключить копирование в большой numpy массив? Зато будут дополнительные расходы на уборщик мусора. Возможно с такими задачами надо работать с помощью ctypes или cython.
Офлайн
alien308Откуда они возникнут? вы будете тасовать элементы списка, но из области видимости они не выйдут. Тут нет повода сильно беспокоиться. Эти потери будут ничтожны по сравнению с тем что вам уже дало использование питона.
Зато будут дополнительные расходы на уборщик мусора
alien308Для принятия решения
Возможно с такими задачами надо работать с помощью ctypes или cython.
Офлайн