import numpy as np N, F = 1000, 20 A = np.random.randn(N, F) def sig(x, mean, std): return (x-mean)/std def sig_loop(): svals = [] for j in range(F): a = A[:, j] mean = np.mean(a) std = np.std(a) svals.append([sig(x, mean, std) for x in a]) return svals def sig_vec(): svals = [] for j in range(F): a = A[:, j] mean = np.mean(a) std = np.std(a) svals.append(sig(a, mean, std)) return svals def sig_mat(): return sig(A, np.mean(A, 0), np.std(A, 0)) %timeit sig_loop() %timeit sig_vec() %timeit sig_mat() from mongoengine import connect, Document, ListField class Test(Document): g = ListField() t = Test(g=['3']*20) class Test2: g = ['3']*20 t2 = Test2() %timeit t.g %timeit t2.g %timeit t._data['g'] import pymongo from mongoengine import connect, Document, ListField connect('test') db = pymongo.MongoClient().test class Test(Document): g = ListField() docs1 = [Test(g=['3']*20) for _ in range(10000)] docs2 = [{'g':['3']*20} for _ in range(10000)] db.drop_collection('test') %time Test.objects.insert(docs1) db.drop_collection('test') %time x=[doc.save() for doc in docs1] db.drop_collection('test') %time db.test.insert(docs2) db.drop_collection('test') %time x=[db.test.insert(doc) for doc in docs2]