Среднеквадратичное значение квадрата в numpy и усложнения матрицы и массивов numpy

Может ли кто-нибудь направить меня в раздел руководства numpy, где я могу получить функции для выполнения среднеквадратичных вычислений... (я знаю, что это может быть достигнуто с помощью np.mean и np.abs.. нет там встроенного..и нет почему??.. просто любопытно..но обидно)

может кто-нибудь объяснить сложности матрицы и массивов (только в следующем случае):

U - это матрица (T-by-N, или, например, T cross N), Ue - другая матрица (T-by-N) Я определяю k как массив numpy

U[ind,:] остается матрицей

следующим образом k = np.array(U[ind,:])

при печати k или введите k в ipython

отображается следующее

K = array ([[2,.3 .....
              ......
                9]])

Вы видите двойные квадратные скобки (что делает его многомерным, я думаю) который дает ему форму = (1, N)

но я не могу присвоить его массиву, определенному таким образом

l = np.zeros(N)
shape = (,N) or perhaps (N,) something like that

l[:] = k[:]
error:
matrix dimensions incompatible

Есть ли способ выполнить векторное назначение, которое я намереваюсь сделать... Пожалуйста, не говорите мне об этом l = k (который побеждает цель... Я получаю разные ошибки в программе. Я знаю, причины.. Если вам нужно, я могу прикрепить кусок кода)

Написание цикла - это тупой способ, который я использую в настоящее время...

Надеюсь, я смог объяснить... проблемы, с которыми я сталкиваюсь.

приветствует...

Ответ 1

Попробуйте следующее:

U = np.zeros((N,N))
ind = 1
k = np.zeros(N)
k[:] = U[ind,:]

Ответ 2

Для RMS я считаю это самым ясным:

from numpy import mean, sqrt, square, arange
a = arange(10) # For example
rms = sqrt(mean(square(a)))

Код читается так, как вы говорите: "root-mean-square".

Ответ 3

Для среднеквадратичного значения быстрое выражение, которое я нашел для небольших x.size (~ 1024) и реальных x:

def rms(x):
    return np.sqrt(x.dot(x)/x.size)

Кажется, это примерно в два раза быстрее, чем версия linalg.norm (ipython% timeit на действительно старом ноутбуке).

Если вам нужны более сложные массивы, то это также сработает:

def rms(x):
    return np.sqrt(np.vdot(x, x)/x.size)

Однако эта версия почти так же медленна, как версия norm и работает только для плоских массивов.

Ответ 4

Для RMS, как насчет

norm(V)/sqrt(V.size)

Ответ 5

Я не знаю, почему он не встроен. Мне нравится

def rms(x, axis=None):
    return sqrt(mean(x**2, axis=axis))

Если у вас есть nans в ваших данных, вы можете сделать

def nanrms(x, axis=None):
    return sqrt(nanmean(x**2, axis=axis))

Ответ 6

Я использую это для RMS, используя NumPy, и пусть он также имеет необязательный axis, аналогичный другим функциям NumPy:

import numpy as np   
rms = lambda V, axis=None: np.sqrt(np.mean(np.square(V), axis))