Это тесно связано с ответами на понимание списка по сравнению с картой , так как вы используете lambda
с оператором reduce
, вы отправляете код Python, который будет выполняться для каждой итерации, таким образом замедление снижения. Понимание списка должно было быть намного более эффективным и читаемым, поэтому они являются предпочтительным методом выбора.
Тем не менее, почему бы не использовать itertools.chain.from_iterable
, а также map
ping operator.itemgetter
. Это приводит к тому же результату при использовании некоторых замечательных встроенных методов. Не проверял на скорость
>>> from itertools import chain
>>> from operator import itemgetter
>>> arr = array([[array([33120, 28985, 9327, 45918, 30035, 17794, 40141, 1819, 43668],
dtype='int64')],
[array([33754, 24838, 17704, 21903, 17668, 46667, 17461, 32665],
dtype='int64')],
[array([46842, 26434, 39758, 27761, 10054, 21351, 22598, 34862, 40285,
17616, 25146, 32645, 41276], dtype='int64')],
[array([24534, 8230, 14267, 9352, 3543, 29397, 900, 32398, 34262,
37646, 11930, 37173], dtype='int64')],
[array([25157], dtype='int64')],
[array([ 8859, 20850, 19322, 8075], dtype='int64')]], dtype=object)
>>> array(list(chain.from_iterable(map(itemgetter(0),arr.tolist()))))
[33120 28985 9327 45918 30035 17794 40141 1819 43668 33754 24838 17704
21903 17668 46667 17461 32665 46842 26434 39758 27761 10054 21351 22598
34862 40285 17616 25146 32645 41276 24534 8230 14267 9352 3543 29397
900 32398 34262 37646 11930 37173 25157 8859 20850 19322 8075]