numpy.mean(X,axis = 0)2d数组,否则什么也不做

问题描述 投票:4回答:2

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

对于一维数组,我希望它仅返回自身,因为只有1个“行”,而不是对元素求平均并返回标量。

除了获取平均值之前是否只检查ndim属性,是否有其他方法来做到这一点?

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
python numpy linear-algebra
2个回答
6
投票

使用np.atleast_2d-

np.atleast_2d

对于2D,np.atleast_2d(ar).mean(axis=0) 不变。对于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.])

3
投票

不太优雅的解决方案,但更多的是“技巧”,是将索引的元组传递给ar.reshape(-1,ar.shape[-1]).mean(0) 参数。如果为空,则返回原始数组。因此,您可以为其传递一系列索引:

axis=…

因此,这将导致2d数组的单例元组dEdw = dE_matrix.mean(axis=tuple(range(dE_matrix.ndim-1))),而对于1d数组的结果为空元组(0,)

© www.soinside.com 2019 - 2024. All rights reserved.