如何在numpy.apply_along_axis中向lambda传入沿轴拆分的多参数
报错原因
np.apply_along_axis 会将指定轴切分得到的一维数组作为单个参数传入回调函数,不会自动把数组内的元素拆分为多个独立参数,因此你最初传入需要3个位置参数的lambda会触发参数缺失报错。
方案1:符合你要求的传参写法
可以在回调函数内部做参数解包,不需要写索引即可直接用r/g/b语义化变量操作:
np.apply_along_axis(lambda x: (lambda r, g, b: r * 0.5 + g * 0.25 + b * 0.25)(*x), axis=-1, arr=a)
方案2:更推荐的numpy向量化写法
你的RGB通道加权计算场景完全不需要用np.apply_along_axis,直接用向量化运算代码更简洁,执行效率也远高于前者:
# 写法1:矩阵乘法 a @ [0.5, 0.25, 0.25] # 写法2:逐元素乘后求和 (a * [0.5, 0.25, 0.25]).sum(axis=-1)
两种写法均可直接得到你预期的输出[[1.75, 4.75], [4.75, 1.75]]。
内容的提问来源于stack exchange,提问作者Gordon Hui
相关产品推荐
相关产品推荐

