Предположим, у меня есть массив numpy:
data = np.array([[1,1,1],[2,2,2],[3,3,3]])
и у меня есть соответствующий "вектор:"
vector = np.array([1,2,3])
Как мне действовать в data
каждой строке, чтобы вычесть или разделить, чтобы результат был таким:
sub_result = [[0,0,0], [0,0,0], [0,0,0]]
div_result = [[1,1,1], [1,1,1], [1,1,1]]
Короче говоря: как мне выполнить операцию с каждой строкой 2D-массива с 1D-массивом скаляров, соответствующих каждой строке?
None
прежнему работает аналогичноnp.newaxis
. Я не уверен, что это за настройка или какая именно проблема у вас возникла, но ответ все еще действителен.Как уже упоминалось, нарезка с помощью
None
или с помощьюnp.newaxes
- отличный способ сделать это. Другой альтернативой является использование транспонирования и трансляции, как ви
Для массивов более высокой размерности вы можете использовать
swapaxes
метод массивов NumPy илиrollaxis
функцию NumPy . Для этого действительно есть много способов.Более полное объяснение вещания см. На http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html.
источник
Решение JoshAdel использует np.newaxis для добавления измерения. Альтернативой является использование reshape () для выравнивания размеров при подготовке к трансляции .
Выполнение reshape () позволяет выровнять размеры для трансляции:
Обратите внимание, что
data/vector
это нормально, но вы не получите того ответа, который вам нужен. Он делит каждый столбец изarray
(вместо каждой строки ) каждого соответствующего элементаvector
. Это то , что вы получите , если вы явно изменилиvector
быть1x3
вместо3x1
.источник
Питонический способ сделать это ...
Это позаботится о изменении формы, а также результаты будут в формате с плавающей запятой. В других ответах результаты представлены в формате округленных целых чисел.
# ПРИМЕЧАНИЕ: ни один столбец в данных и векторе не должен совпадать.
источник
Добавляя к ответу stackoverflowuser2010, в общем случае вы можете просто использовать
Это превратит ваш вектор в
column matrix/vector
. Позволяет вам выполнять поэлементные операции по своему усмотрению. По крайней мере, для меня это наиболее интуитивно понятный способ решения этой проблемы, и поскольку (в большинстве случаев) numpy будет просто использовать представление той же внутренней памяти для изменения ее формы.источник
.reshape(-1,1)
является наиболее интуитивно понятным способом использования широковещательной передачи.