Python: Как умножить столбец в 3D-массиве на значение

#python #arrays #numpy #data-structures

#python #массивы #numpy #структуры данных

Вопрос:

У меня есть простой 3D-массив numpy:

 a = np.array([[[0, 1]],
              [[2, 3]],
              [[4, 5]]])
 

Как я могу умножить второй столбец на отрицательный 1, чтобы получить:

 np.array([[[0, -1]],
          [[2, -3]],
          [[4, -5]]])
 

Я попытался использовать

 a[:,1] *= -1
 

Однако я думаю, что это работает только для 2D-массивов.

Комментарии:

1. Так что же произошло вместо этого? Умножение работает для любого количества измерений, а не только для 2D-массивов.

2. Добавьте еще один индекс для 2-го измерения. np.array[:,:,1] *= -1

3. @Psidom Я получаю эту ошибку при добавлении другого:, поэтому я не уверен, в чем моя проблема a = a[:,:,1] *= -1 ^ SyntaxError: недопустимый синтаксис

Ответ №1:

Просто добавьте еще : один фрагмент для среднего измерения:

 a[:, :, 1] *= -1
# 1, 2, 3  dimensions
 

или используйте ... объект ellipsis, чтобы пропустить все измерения, кроме последнего:

 a[..., 1] *= -1
# ?  , last  dimensions.
 

Вы также можете указать имя этого объекта:

 a[Ellipsis, 1] *= -1
 

Смотрите Документацию по индексации:

Многоточие расширяется до количества : объектов, необходимых для того, чтобы кортеж выбора индексировал все измерения.

ДЕМОНСТРАЦИЯ:

 In [1]: import numpy as np

In [2]: a = np.array([[[0, 1]],
   ...:               [[2, 3]],
   ...:               [[4, 5]]])

In [3]: a[..., 1] *= -1

In [4]: a
Out[4]:
array([[[ 0, -1]],

       [[ 2, -3]],

       [[ 4, -5]]])
 

Комментарии:

1. Привет, спасибо за ваш ответ. Я подумал, что могу просто добавить еще один: slice , однако я столкнулся с другой ошибкой, указывающей на недопустимый синтаксис, со стрелкой, указывающей на «=»

2. a = a[:, :, 1] *= -1 ^ SyntaxError: недопустимый синтаксис

3. Отбросьте a = . Вы уже назначаете с *= помощью расширенного назначения.

4. OMG, что сработало, использовало … в качестве вашего первого примера