Требования:
- Мне нужно собрать массив, произвольно большой от данных.
- Я могу угадать размер (примерно 100-200) без каких-либо гарантий, что массив будет соответствовать каждый раз
- Как только он вырастет до его окончательного размера, мне нужно выполнить числовые вычисления на нем, поэтому я предпочел бы, в конечном итоге, перейти к массиву с двумя размерами.
- Скорость критическая. Например, для одного из 300 файлов метод update() называется 45 миллионов раз (занимает 150 с или около того), а метод finalize() называется 500k раз (занимает в общей сложности 106 секунд)... в общей сложности 250 или так.
Вот мой код:
def __init__(self):
self.data = []
def update(self, row):
self.data.append(row)
def finalize(self):
dx = np.array(self.data)
Другие вещи, которые я пытался, включают следующий код... но это waaaaay медленнее.
def class A:
def __init__(self):
self.data = np.array([])
def update(self, row):
np.append(self.data, row)
def finalize(self):
dx = np.reshape(self.data, size=(self.data.shape[0]/5, 5))
Вот схема, как это называется:
for i in range(500000):
ax = A()
for j in range(200):
ax.update([1,2,3,4,5])
ax.finalize()
# some processing on ax