平均数(X,轴=0)当二维数组时,否则不执行任何操作

2024-10-03 04:36:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,除其他外,它计算数组(2d或1d)行的平均值。这是通过ndarray.mean(axis=0)

对于1d数组,我希望它只返回自身,因为只有1行,而不是平均元素并返回标量

除了在取平均值之前检查ndim属性之外,还有其他类似python的方法吗

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

Tags: 函数hatnpde数组meanmatrix平均值
2条回答

一个不那么优雅的解决方案,但更多的是一个“技巧”,它将索引元组传递给axis=…参数。如果为空,则返回原始数组。因此,您可以向其传递一系列索引:

dEdw = dE_matrix.mean(axis=tuple(range(dE_matrix.ndim-1)))

因此,对于2d数组,这将导致一个单元组(0,),对于1d数组,这将导致一个空元组()

使用^{}-

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)

相关问题 更多 >