Julia中如何对CartesianIndex执行逐元素取最大值操作?
对CartesianIndex执行逐元素取最大值的方案
你的当前实现方式是正确的,能得到期望的CartesianIndex(5,4,8,4)结果。下面提供几种更简洁或更符合Julia习惯的解决方案:
1. 利用map简化写法
无需拆包操作,直接用map对两个索引的元组逐元素应用max,再传给CartesianIndex构造函数:
a = CartesianIndex(2,4,5,4) b = CartesianIndex(5,2,8,1) CartesianIndex(map(max, a.I, b.I)) # 输出:CartesianIndex(5, 4, 8, 4)
2. 定义广播版max方法(推荐常用场景)
如果需要频繁执行这类操作,可以给CartesianIndex扩展broadcasted版本的max方法,这样就能像普通向量一样用max.(a,b)的语法:
# 扩展方法 Base.broadcasted(::typeof(max), a::CartesianIndex, b::CartesianIndex) = CartesianIndex(max.(a.I, b.I)...) # 使用示例 a = CartesianIndex(2,4,5,4) b = CartesianIndex(5,2,8,1) max.(a,b) # 输出:CartesianIndex(5, 4, 8, 4)
关于原始写法的说明
你最初的实现CartesianIndex(max.(a.I,b.I)...)完全合理,本质是通过max.(a.I,b.I)生成逐元素取最大值的元组,再通过拆包...传递给构造函数,逻辑清晰且结果正确。
内容的提问来源于stack exchange,提问作者Sakurai.JJ
相关产品推荐
相关产品推荐

