Удалить среднее значение из матрицы numpy

У меня есть матрица N с матрицей A где данные организованы в виде столбцов-векторов, т.е. A[:,0] – первый вектор данных, A[:,1] – второй и т. Д. Я хотел знать, был ли более элегантный способ обнулить среднее из этих данных. В настоящее время я делаю это через цикл for :

 mean=A.mean(axis=1) for k in range(A.shape[1]): A[:,k]=A[:,k]-mean 

Так что numpy предоставляет функцию для этого? Или это можно сделать более эффективно по-другому?

3 Solutions collect form web for “Удалить среднее значение из матрицы numpy”

Как это обычно бывает, вы можете сделать это несколькими способами. Каждый из подходов ниже работает, добавляя измерение к mean вектору, делая его массивом размером 4 x 1, а затем вещание NumPy заботится обо всем остальном. Каждый подход создает представление о mean , а не глубокой копии. Первый подход (т. newaxis Использование 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

В документации указано, что вместо newaxis можно использовать newaxis . Это потому что

 >>> np.newaxis is None True 

Поэтому выполнение этой задачи выполняется.

 >>> A - mean[:, None] array([[-1., 0., 1.], [-1., 0., 1.], [-1., 0., 1.], [-1., 0., 1.]]) 

Тем не менее, newaxis более newaxis и должен быть предпочтительным. Кроме того, можно сделать 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.]]) 

Вы также можете использовать matrix вместо array . Тогда вам не нужно будет изменять форму:

 >>> A = np.matrix([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]]) >>> m = A.mean(axis=1) >>> A - m matrix([[-1., 0., 1.], [-1., 0., 1.], [-1., 0., 1.], [-1., 0., 1.]]) 

Да. pylab.demean :

 In [1]: X = scipy.rand(2,3) In [2]: X.mean(axis=1) Out[2]: array([ 0.42654669, 0.65216704]) In [3]: Y = pylab.demean(X, axis=1) In [4]: Y.mean(axis=1) Out[4]: array([ 1.85037171e-17, 0.00000000e+00]) 

Источник:

 In [5]: pylab.demean?? Type: function Base Class: <type 'function'> String Form: <function demean at 0x38492a8> Namespace: Interactive File: /usr/lib/pymodules/python2.7/matplotlib/mlab.py Definition: pylab.demean(x, axis=0) Source: def demean(x, axis=0): "Return x minus its mean along the specified axis" x = np.asarray(x) if axis == 0 or axis is None or x.ndim <= 1: return x - x.mean(axis) ind = [slice(None)] * x.ndim ind[axis] = np.newaxis return x - x.mean(axis)[ind] 
  • Ускорение вычисления матрицы расстояния с помощью Numpy и Cython
  • Хранить различные типы данных в одном массиве NumPy?
  • Как выполнить нелинейную оптимизацию с помощью scipy / numpy или sympy?
  • Конъюгатный оператор транспонирования ".H" в numpy
  • Передача процентилей в функцию pandas agg
  • Комбинаторный взрыв при слиянии данных в пандах
  • Как форматировать в numble savetxt так, что нули сохраняются только как «0»,
  • Размеры Numpy.dot () не выровнены
  • Простая сальто-хвостовая сварка
  • CSR, несоответствие индексов и indptr
  • Расстояние между массивами numpy, columnwise
  • Python - лучший язык программирования в мире.