Как инициализировать целочисленный объект array.array с нулями в Python

Вопросы с похожими заголовками касаются списков Python или NumPy. Это о части класса array.array стандартной библиотеки Python, см.https://docs.python.org/2/library/array.html

Быстрый подход, который я придумал (для целочисленных типов), заключается в использовании array.fromfile с / dev / zero. Это

примерно в 27 раз быстрее, чем array.array ('L', [0] * size), который временно требует более чем вдвое больше памяти, чем для окончательного массива,примерно в 4,7 раза быстрее, чем arrar.array ('L', [0]) * sizeи более чем в 200 раз быстрее, чем использование настраиваемого итерируемого объекта (чтобы избежать создания большого временного списка).

Однако / dev / zero может быть недоступен на некоторых платформах. Есть ли лучший способ сделать это без NumPy, нестандартных модулей или моего собственного c-расширения?

Код демонстратора:

import array
import sys
import time

size = 100 * 1000**2
test = sys.argv[1]

class ZeroIterable:
    def __init__(self, size):
        self.size = size
        self.next_index = 0
    def next(self):
        if self.next_index == self.size:
            raise StopIteration
        self.next_index = self.next_index + 1
        return 0
    def __iter__(self):
        return self

t = time.time()
if test == 'Z':
    myarray = array.array('L')
    f = open('/dev/zero', 'rb')
    myarray.fromfile(f, size)
    f.close()
elif test == 'L':
    myarray = array.array('L', [0] * size)
elif test == 'S':
    myarray = array.array('L', [0]) * size
elif test == 'I':
    myarray = array.array('L', ZeroIterable(size))     
print time.time() - t

Ответы на вопрос(0)

Ваш ответ на вопрос