Dost dobře chápu že má někdo potřebu pracovat s "hutnými" poli, ale není potom lepší už jít raději přímo do NumPy? To je ověřená věc a pokud se pořád ty hodnoty nepřenáší do Pythonu, tak i mega rychlá (ale fakt to chce s těmi poli pracovat jako s celkem a nepřenášet prvky sem a tam - to je potom peklo). Jako NumPy je fakt hodně dobrá věc pro Python a řekl bych, že i kvůli tomu se lidi neohlíží například po Julii.
Myslím, že jste si odpověděl sám -- pokud nepotřebujete pracovat s polem jako tensorem, ale jen s jeho jednotlivými prvky, může být array.array
lepší volba, protože je standardní a rychlejší:
import array import numpy as np np_ones = np.ones(1000, dtype=np.float32) %timeit np_ones[42] 82.1 ns ± 5.5 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each) array_ones = array.array('f', [1] * 1000) %timeit array_ones[42] 34 ns ± 0.312 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)
Zároveň dokáže array.array
efektivně přidávat i odebírat z konce pomocí .append
a spol; numpy takové API nenabízí, většina volání vrací nové pole (kromě numpy.ndarray.resize
), a pro efektivní implementaci by člověk sám musel řešit zdvojnásobování velikosti apod.