将每个立方体的平面除以其中位数而没有环

Han*_*nah 2 python numpy

我需要规范化一个numpy数据立方体说:

cube = np.random.random(100000).reshape(10,100,100)
Run Code Online (Sandbox Code Playgroud)

然后用中位数对10个结果平面中的每一个进行归一化.所以,例如对于第一架飞机

cube[0, :, :] /= np.median(cube[0, :, :])
Run Code Online (Sandbox Code Playgroud)

我只想避免循环,如果可能的话谢谢

DSM*_*DSM 5

您可以将轴列表传递给np.median,然后通过None(np.newaxis)展开:

>>> cube = np.random.random(100000).reshape(10,100,100)
>>> simple = cube / np.median(cube,axis=[1,2])[:,None,None]
>>> 
>>> brute = cube.copy()
>>> for i in range(10):
...     brute[i, :, :] /= np.median(cube[i, :, :])
...     
>>> np.allclose(brute, simple)
True
Run Code Online (Sandbox Code Playgroud)

但说实话,如果其他轴的长度更长,那么在最短轴上循环往往不是那么糟糕.

  • 如果你使用的是版本1.9.0或更新的numpy,那么你可以使用`np.median(cube,in,而不是`np.median(cube,axis = [1,2])[:,None,None]` axis = [1,2],keepdims = True)`. (3认同)