Numpy добавить данные строки - PullRequest
0 голосов
/ 29 ноября 2018

С учетом массива, например,

A = np.ones(shape=(7, 6), dtype=np.float32)

и списка

v = [[0, 2], [1, 4], [3, 5, 6]]

, что я хочу сделать, это добавить строки в A для каждого элемента в v,для v есть 3 элемента, для v[0] добавьте строку 0 и строку 2 по столбцам.Форма вывода - (3, 6), а вывод -

res = array([[2., 2., 2., 2., 2., 2.],
             [2., 2., 2., 2., 2., 2.],
             [3., 3., 3., 3., 3., 3.]])

# res[0] = A[0] + A[2]
# res[1] = A[1] + A[4]
# res[2] = A[3] + A[5] + A[6]

. Вот более четкий пример, дайте матрицу

m = [[1, 2, 3],
      [2, 3, 4],
      [1, 1, 1],
      [2, 2, 2],
      [1, 1, 1]]

и строки, которые нужно добавить

 v = [[0, 1, 3], [2]]

Итак, здесь добавьте строки 0, 1 и 3 в матрице m, и так как в [2] будет добавлена ​​только одна строка, результат будет

# res.shape = (2, 3)
res[0] = m[0] + m[1] + m[3]
res[1] = m[2]

Есть ли более элегантный способ сделать это?

1 Ответ

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

Вы можете использовать необычную индексацию для выбора строк из вашего массива.

Для A:

>>> A = np.ones(shape=(7, 6), dtype=np.float32)
>>> v = [[0, 2], [1, 4], [3, 5, 6]]
>>> np.array([A[rows].sum(axis=0) for rows in v])
array([[2., 2., 2., 2., 2., 2.],
       [2., 2., 2., 2., 2., 2.],
       [3., 3., 3., 3., 3., 3.]], dtype=float32)

Для m:

>>> m = np.array([[1, 2, 3], [2, 3, 4], [1, 1, 1], [2, 2, 2], [1, 1, 1]])
>>> v = [[0, 1, 3], [2]]
>>> np.array([m[rows].sum(axis=0) for rows in v])
array([[5, 7, 9],
       [1, 1, 1]])

Iне знаю, может ли это быть векторизовано дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...