Арифметическая c операция по динамически указанной оси - PullRequest
1 голос
/ 01 мая 2020

Я хочу выполнить арифметическую c операцию с динамически указанной осью и индексировать и обновить значения в исходном массиве, например:

import numpy as np

array = np.array([[[1, 2],
                   [3, 4],
                   [5, 6]],
                  [[7, 8],
                   [9, 10],
                   [11, 12]]])
axis = 1
indices = [0,2]

, например, добавить 1 к указанной оси и индексам и получить новый массив как:

array = [[[2, 3],
          [3, 4],
          [6, 7]],
         [[8, 9],
          [9, 10],
          [12, 13]]])

Ответы [ 3 ]

0 голосов
/ 01 мая 2020

, если вы хотите, чтобы все oop использовали:

import numpy as np

array = np.array([[[1, 2],
                   [3, 4],
                   [5, 6]],
                  [[7, 8],
                   [9, 10],
                   [11, 12]]])
indices = [0, 2]

for i in array:
    i[[0, 2]] += 1
0 голосов
/ 02 мая 2020

Я получил ответ в этом посте: Нарезка массива numpy вдоль динамически указанной оси Как раз в моем случае:

def slicer(array, indices, axis):
    selection = [slice(None)] * array.ndim
    selection[axis] = indices
    return tuple(selection)

slice(None) эквивалентно :. Наконец:

array[slicer(array, indices, axis)] += 1
0 голосов
/ 01 мая 2020
import numpy as np

array = np.array([[[1, 2],
                   [3, 4],
                   [5, 6]],
                  [[7, 8],
                   [9, 10],
                   [11, 12]]])
indices = [0, 2]

# either like this
array[:, indices, :] += 1

# or using a for loop
for idx in range(len(array)):  
   array[idx, indices, :] += 1

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