numpy中的均方根和矩阵和numpy阵列的并发症

时间:2011-04-10 16:53:02

标签: python 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,:])

我在ipython中打印k或输入k

显示以下

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(这会失败目的......我在程序中得到不同的错误..我知道原因..如果你需要我可以附上这段代码)

写一个循环是一种愚蠢的方式......我暂时使用它......

我希望我能够解释......我面临的问题......

问候......

6 个答案:

答案 0 :(得分:63)

对于RMS,我认为这是最清楚的:

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

代码读起来就像你说的那样:“root-mean-square”。

答案 1 :(得分:9)

对于有效值,我找到的小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版本一样慢,仅适用于平面阵列。

答案 2 :(得分:6)

对于RMS,怎么样

norm(V)/sqrt(V.size)

答案 3 :(得分:6)

我不知道为什么它没有内置。我喜欢

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))

答案 4 :(得分:5)

试试这个:

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

答案 5 :(得分:0)

我将它用于RMS,全部使用NumPy,并且让它也有一个与其他NumPy函数类似的可选axis

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