#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, что сработало, использовало … в качестве вашего первого примера