Python np.nanmax()除了一个轴之外,其他所有轴都有-这是最好的方法吗?

Python np.nanmax()除了一个轴之外,其他所有轴都有-这是最好的方法吗?,python,numpy,Python,Numpy,对于维度n的numpy数组,我想将np.nanmax()应用于n-1维度,生成一个最大值的一维数组,忽略设置为np.nan的所有值 q = np.arange(5*4*3.).reshape(3,4,5) % (42+1) q[q%5==0] = np.nan 制作: array([[[ nan, 1., 2., 3., 4.], [ nan, 6., 7., 8., 9.], [ nan, 11., 12.,

对于维度
n
的numpy数组,我想将np.nanmax()应用于
n-1
维度,生成一个最大值的一维数组,忽略设置为
np.nan
的所有值

q         = np.arange(5*4*3.).reshape(3,4,5) % (42+1)
q[q%5==0] = np.nan
制作:

array([[[ nan,   1.,   2.,   3.,   4.],
        [ nan,   6.,   7.,   8.,   9.],
        [ nan,  11.,  12.,  13.,  14.],
        [ nan,  16.,  17.,  18.,  19.]],

       [[ nan,  21.,  22.,  23.,  24.],
        [ nan,  26.,  27.,  28.,  29.],
        [ nan,  31.,  32.,  33.,  34.],
        [ nan,  36.,  37.,  38.,  39.]],

       [[ nan,  41.,  42.,  nan,   1.],
        [  2.,   3.,   4.,  nan,   6.],
        [  7.,   8.,   9.,  nan,  11.],
        [ 12.,  13.,  14.,  nan,  16.]]])
如果我提前知道我想使用最后一个轴作为剩余尺寸,我可以使用
.reforme()
中的
-1
功能,并执行以下操作:

np.nanmax(q.reshape(-1, q.shape[-1]), axis=0)
这会产生我想要的结果:

array([ 12.,  41.,  42.,  38.,  39.])
但是,假设我事先不知道我不想对哪一个轴应用最大值?假设我从
n=4
维度开始,希望它应用于除
m
th轴之外的所有轴,该轴可以是0、1、2或3?如果elif else,则必须实际使用条件语句


是否存在类似于假设的
exeptaxis=m

nanmax的
参数可以是计算最大值的轴元组。在本例中,您希望该元组包含除
m
之外的所有轴。这里有一种方法可以做到这一点:

In [62]: x
Out[62]: 
array([[[[  4.,   3.,  nan,  nan],
         [  0.,   2.,   2.,  nan],
         [  4.,   5.,  nan,   3.],
         [  2.,   0.,   3.,   1.]],

        [[  2.,   0.,   0.,   1.],
         [ nan,   3.,   0.,  nan],
         [  0.,   1.,  nan,   2.],
         [  5.,   4.,   0.,   1.]],

        [[  4.,   0.,   2.,   0.],
         [  4.,   0.,   4.,   5.],
         [  3.,   4.,   1.,   0.],
         [  5.,   3.,   4.,   3.]]],


       [[[  2.,  nan,   6.,   4.],
         [  3.,   1.,   2.,  nan],
         [  5.,   4.,   1.,   0.],
         [  2.,   6.,   0.,  nan]],

        [[  4.,   1.,   4.,   2.],
         [ nan,   1.,   5.,   5.],
         [  2.,   0.,   1.,   1.],
         [  6.,   3.,   6.,   5.]],

        [[  1.,   0.,   0.,   1.],
         [  1.,  nan,   2.,  nan],
         [  3.,   4.,   0.,   5.],
         [  1.,   6.,   2.,   3.]]]])

In [63]: m = 0

In [64]: np.nanmax(x, axis=tuple(i for i in range(x.ndim) if i != m))
Out[64]: array([ 5.,  6.])

答对 了我想我曾经知道那件事。我很确定一定有一种优雅的方式来做这件事。非常感谢。我想我甚至可以尝试使用
.pop()
在对其进行tupleing之前以某种方式将其从列表中删除,但出于某种原因,我害怕
.pop()