Суммирование столбцов массивов разных форм в массиве массивов - Python 3.x - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть массив, который содержит 2D-массивы. Для каждого 2D-массива я хочу суммировать столбцы, и результат должен быть в форме столбца.
У меня есть кусок кода, чтобы сделать это, но я чувствую, что я не использую Numpy оптимально. Какой самый быстрый способ сделать это?
Мой текущий код:

temp = [np.sum(l_i,axis=1).reshape(-1,1) for l_i in self.layer_inputs]

Пример массива:

array([
    array([[  0.48517904, -11.10809746],
           [ 13.64104864,   5.77576326]]),
    array([[16.74109924, -3.28535518],
           [-4.00977275, -3.39593759],
           [ 5.9048581 , -1.65258805],
           [13.40762143, -1.61158724],
           [ 9.8634849 ,  8.02993728]]),
    array([[-7.61920427, -3.2314264 ],
           [-3.79142779, -2.44719713],
           [32.42085005,  4.79376209],
           [13.97676962, -1.19746096],
           [45.60100807, -3.01680368]]) 
], dtype=object)

Образец Ожидаемый результат:

[array([[-10.62291842],
       [ 19.41681191]]), 
 array([[13.45574406],
        [-7.40571034],
        [ 4.25227005],
        [11.7960342 ],
        [17.89342218]]), 
 array([[-10.85063067],
        [ -6.23862492],
        [ 37.21461214],
        [ 12.77930867],
        [ 42.58420439]])   ]

1 Ответ

0 голосов
/ 11 ноября 2018

Новый ответ

Учитывая ваши строгие требования к списку массивов, более вычислительно эффективного решения не существует.

Исходный ответ

Чтобы использовать NumPy, неработать со списком массивов: dtype=object - это подсказка, которую вы не сможете использовать векторизованными операциями.

Вместо этого объедините в один массив, например, через np.vstack, и сохраните индексы разделения.Если вам нужен список массивов, используйте np.split в качестве последнего шага.Но это постоянное переключение между списками и одним массивом стоит дорого.На самом деле, вы должны попытаться просто сохранить разбиения и один массив, то есть idx и data ниже.

idx = np.array(list(map(len, A))).cumsum()[:-1]  # [2, 7]
data = np.vstack(A).sum(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...