Заменить подмассивы в numpy

Дан массив ,

>>> n = 2
>>> a = numpy.array([[[1,1,1],[1,2,3],[1,3,4]]]*n)
>>> a
array([[[1, 1, 1],
        [1, 2, 3],
        [1, 3, 4]],

       [[1, 1, 1],
        [1, 2, 3],
        [1, 3, 4]]])

Я знаю, что можно заменить значения в нем лаконично вот так,

>>> a[a==2] = 0
>>> a
array([[[1, 1, 1],
        [1, 0, 3],
        [1, 3, 4]],

       [[1, 1, 1],
        [1, 0, 3],
        [1, 3, 4]]])

Можно ли сделать то же самое для всей строки (последняя ось) в массиве? Я знаю, что a[a= =[1,2,3]] = 11будет работать и заменит все элементы совпадающих подмассивов на 11, но я хотел бы заменить другой подмассив. Моя интуиция подсказывает мне написать следующее, но результаты ошибки,

>>> a[a==[1,2,3]] = [11,22,33]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: array is not broadcastable to correct shape

В итоге я хотел бы получить следующее:

array([[[1, 1, 1],
        [11, 22, 33],
        [1, 3, 4]],

       [[1, 1, 1],
        [11, 22, 33],
        [1, 3, 4]]])

... и n, конечно, в общем случае намного больше, чем 2, а другие оси также больше, чем 3, поэтому Я не хочу перебирать их, если мне это не нужно


Обновление: [1,2,3](или что-то еще, что я ищу) не всегда индекс 1. Пример:

a = numpy.array([[[1,1,1],[1,2,3],[1,3,4]], [[1,2,3],[1,1,1],[1,3,4]]])
6
задан Karol 5 June 2012 в 08:52
поделиться