Ответ 1
Как обычно, вы можете сделать это несколькими способами. Каждый из подходов ниже работает, добавляя измерение к вектору mean
, делая его массивом размером 4 x 1, а затем вещание NumPy заботится обо всем остальном. Каждый подход создает представление mean
, а не глубокую копию. Первый подход (т.е. Использование newaxis
), скорее всего, предпочтительнее большинства, но другие методы включены для записи.
В дополнение к приведенным ниже подходам см. также ответ ovgolovin, который использует матрицу NumPy, чтобы избежать необходимости полностью изменить mean
.
В приведенных ниже методах мы начинаем с следующего массива кода и примера A
.
import numpy as np
A = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
mean = A.mean(axis=1)
Использование numpy.newaxis
>>> A - mean[:, np.newaxis]
array([[-1., 0., 1.],
[-1., 0., 1.],
[-1., 0., 1.],
[-1., 0., 1.]])
Использование None
В документации указано, что None
можно использовать вместо newaxis
. Это потому, что
>>> np.newaxis is None
True
Следовательно, следующее выполнение задачи.
>>> A - mean[:, None]
array([[-1., 0., 1.],
[-1., 0., 1.],
[-1., 0., 1.],
[-1., 0., 1.]])
Тем не менее, newaxis
более ясен и должен быть предпочтительным. Кроме того, можно сделать вывод, что newaxis
является более перспективным доказательством. См. Также: Numpy: следует ли использовать newaxis или None?
Использование ndarray.reshape
>>> A - mean.reshape((mean.shape[0]), 1)
array([[-1., 0., 1.],
[-1., 0., 1.],
[-1., 0., 1.],
[-1., 0., 1.]])
Изменение ndarray.shape
непосредственно
Вы также можете изменить форму mean
напрямую.
>>> mean.shape = (mean.shape[0], 1)
>>> A - mean
array([[-1., 0., 1.],
[-1., 0., 1.],
[-1., 0., 1.],
[-1., 0., 1.]])