Python gdal_calc.py-如何正确使用numpy.any()?

Python gdal_calc.py-如何正确使用numpy.any()?,python,numpy,Python,Numpy,我在单独的tif文件中有R、G、B波段。每个文件都有掩码,其中没有数据值为0。 以下命令执行此操作: gdal_calc.py -A red.tif --A_band=2 -B green.tif --B_band=2 -C blue.tif --C_band=2 --outfile=mask.tif --calc="255*logical_or(logical_or(A==0,B==0),C==0)" --NoDataValue=255 但是,我可以有更多的频带,我希望使用numpy.any

我在单独的tif文件中有R、G、B波段。每个文件都有掩码,其中没有数据值为0。 以下命令执行此操作:

gdal_calc.py -A red.tif --A_band=2 -B green.tif --B_band=2 -C blue.tif --C_band=2 --outfile=mask.tif --calc="255*logical_or(logical_or(A==0,B==0),C==0)" --NoDataValue=255
但是,我可以有更多的频带,我希望使用numpy.any()动态生成命令:

但是,似乎any()总是返回True,mask.tif的所有像素值都是255。我想对掩码使用255的值,因为255*(真/假)是0/255,而0*(真/假)总是0

谢谢你的帮助

编辑

通过注释,我添加了带有0的轴参数,命令正常工作:

gdal_calc.py -A red.tif --A_band=2 -B green.tif --B_band=2 -C blue.tif --C_band=2 --outfile=mask.tif --calc="255*any([A==0,B==0,C==0],axis=0)" --NoDataValue=255

我不完全理解您的问题,但我认为您希望只沿某个(第零个)维度执行
any
操作,因此请尝试:
“255*any([a==0,B==0,C==0],axis=0)”
添加axis参数是解决方案,非常感谢。然而,当我通过python命令行使用不同的值尝试任何没有axis param的函数时,我得到了正确的结果。在gdal_calc.py中,它创建了所有像素值为255的掩码(返回的任何像素值均为true)。这可能取决于您是使用python内置函数(sum、max、min、any、all等)还是相应的numpy或pylab函数(np.sum、np.max等)。如果你弄乱了你的命名空间(
来自numpy import*
,(避免它)),那么所有这些函数都会被覆盖,它们的行为也会改变。
axis
参数有效表明它是np.any函数。我不完全理解您的问题,但我认为您希望只沿某个(第零个)维度执行
any
操作,因此请尝试:
“255*any([a==0,B==0,C==0],axis=0)”
添加axis参数是解决方案,非常感谢。然而,当我通过python命令行使用不同的值尝试任何没有axis param的函数时,我得到了正确的结果。在gdal_calc.py中,它创建了所有像素值为255的掩码(返回的任何像素值均为true)。这可能取决于您是使用python内置函数(sum、max、min、any、all等)还是相应的numpy或pylab函数(np.sum、np.max等)。如果你弄乱了你的命名空间(
来自numpy import*
,(避免它)),那么所有这些函数都会被覆盖,它们的行为也会改变。
参数有效表示它是np.any函数。
gdal_calc.py -A red.tif --A_band=2 -B green.tif --B_band=2 -C blue.tif --C_band=2 --outfile=mask.tif --calc="255*any([A==0,B==0,C==0],axis=0)" --NoDataValue=255