Ответ 1
Попробуйте следующее:
U = np.zeros((N,N))
ind = 1
k = np.zeros(N)
k[:] = U[ind,:]
Может ли кто-нибудь направить меня в раздел руководства 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
(который побеждает цель... Я получаю разные ошибки в программе. Я знаю, причины.. Если вам нужно, я могу прикрепить кусок кода)
Написание цикла - это тупой способ, который я использую в настоящее время...
Надеюсь, я смог объяснить... проблемы, с которыми я сталкиваюсь.
приветствует...
Попробуйте следующее:
U = np.zeros((N,N))
ind = 1
k = np.zeros(N)
k[:] = U[ind,:]
Для RMS я считаю это самым ясным:
from numpy import mean, sqrt, square, arange
a = arange(10) # For example
rms = sqrt(mean(square(a)))
Код читается так, как вы говорите: "root-mean-square".
Для среднеквадратичного значения быстрое выражение, которое я нашел для небольших 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
и работает только для плоских массивов.
Для RMS, как насчет
norm(V)/sqrt(V.size)
Я не знаю, почему он не встроен. Мне нравится
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))
Я использую это для RMS, используя NumPy, и пусть он также имеет необязательный axis
, аналогичный другим функциям NumPy:
import numpy as np
rms = lambda V, axis=None: np.sqrt(np.mean(np.square(V), axis))