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