gitee.com/quant1x/num@v0.3.2/maximum.go (about) 1 package num 2 3 import ( 4 "gitee.com/quant1x/num/x32" 5 "gitee.com/quant1x/num/x64" 6 "slices" 7 ) 8 9 // Maximum AVX2版本, 两个序列横向比较最大值 10 // 11 // TODO:print(np.maximum(1.4, np.nan)) 输出nan 12 func Maximum[T Number](f1, f2 []T) []T { 13 xlen := len(f1) 14 ylen := len(f2) 15 // 第找出最大长度 16 17 maxLength := xlen 18 if maxLength < ylen { 19 maxLength = ylen 20 } 21 22 // 处理默认值 23 defaultValue := TypeDefault[T]() 24 // 对齐所有长度 25 if xlen < maxLength { 26 f1 = Align(f1, T(defaultValue), maxLength) 27 } 28 if ylen < maxLength { 29 f2 = Align(f2, T(defaultValue), maxLength) 30 } 31 // 初始化返回值 32 var s1, s2 any 33 s1 = f1 34 s2 = f2 35 36 var d any 37 switch fs1 := s1.(type) { 38 case []float32: 39 d = x32.Maximum(fs1, s2.([]float32)) 40 case []float64: 41 d = x64.Maximum(fs1, s2.([]float64)) 42 default: 43 // 目前暂时走不到这里 44 f1 = slices.Clone(f1) 45 __go_maximum(f1, f2) 46 d = f1 47 } 48 return d.([]T) 49 } 50 51 func __go_maximum[T Number](x, y []T) { 52 for i := 0; i < len(x); i++ { 53 if y[i] > x[i] { 54 x[i] = y[i] 55 } 56 } 57 }