numpy.mean(X, axis=0) 当二维数组时,否则什么都不做
numpy.mean(X, axis=0) when 2d array, else do nothing
我有一个函数,除其他外,它计算 ndarray(2d 或 1d)行的平均值。这是通过 ndarray.mean(axis=0)
对于 1d 数组,我希望它只是 return 本身,因为只有 1 "row",而不是对元素求平均并 return 标量。
除了在取平均值之前检查 ndim
属性之外,还有其他 pythonic 方法可以做到这一点吗?
def d_Error(X, y, weights, bias):
y_hat = probability(X, weights, bias)
dE_matrix = (X.T * (y - y_hat)).T # each row is the gradient at that sample
dEdw = np.mean(dE_matrix, axis=0) # get average gradient
dEdb = (y - y_hat).mean() # gives scalar
dEdz = np.append(dEdw, dEdb)
return dEdz
np.atleast_2d(ar).mean(axis=0)
对于 2D,np.atleast_2d
不会改变任何内容。对于1D
,让我们看一个示例案例-
In [125]: a1D = np.arange(4).astype(float)
In [126]: a1D
Out[126]: array([0., 1., 2., 3.])
In [127]: np.atleast_2d(a1D).mean(axis=0)
Out[127]: array([0., 1., 2., 3.])
另一个整形 -
ar.reshape(-1,ar.shape[-1]).mean(0)
一个不太优雅的解决方案,但更多的是 "trick" 将索引元组传递给 axis=…
参数。如果为空,则 returns 原始数组。所以你可以传递一系列索引:
dEdw = dE_matrix.mean(<b>axis=tuple(range(dE_matrix.ndim-1))</b>)
因此,这将导致二维数组的单例元组 (0,)
和一维数组的空元组 ()
。
我有一个函数,除其他外,它计算 ndarray(2d 或 1d)行的平均值。这是通过 ndarray.mean(axis=0)
对于 1d 数组,我希望它只是 return 本身,因为只有 1 "row",而不是对元素求平均并 return 标量。
除了在取平均值之前检查 ndim
属性之外,还有其他 pythonic 方法可以做到这一点吗?
def d_Error(X, y, weights, bias):
y_hat = probability(X, weights, bias)
dE_matrix = (X.T * (y - y_hat)).T # each row is the gradient at that sample
dEdw = np.mean(dE_matrix, axis=0) # get average gradient
dEdb = (y - y_hat).mean() # gives scalar
dEdz = np.append(dEdw, dEdb)
return dEdz
np.atleast_2d(ar).mean(axis=0)
对于 2D,np.atleast_2d
不会改变任何内容。对于1D
,让我们看一个示例案例-
In [125]: a1D = np.arange(4).astype(float)
In [126]: a1D
Out[126]: array([0., 1., 2., 3.])
In [127]: np.atleast_2d(a1D).mean(axis=0)
Out[127]: array([0., 1., 2., 3.])
另一个整形 -
ar.reshape(-1,ar.shape[-1]).mean(0)
一个不太优雅的解决方案,但更多的是 "trick" 将索引元组传递给 axis=…
参数。如果为空,则 returns 原始数组。所以你可以传递一系列索引:
dEdw = dE_matrix.mean(<b>axis=tuple(range(dE_matrix.ndim-1))</b>)
因此,这将导致二维数组的单例元组 (0,)
和一维数组的空元组 ()
。