github.com/qiaogw/arrgo@v0.0.8/compare_opt.go (about) 1 package arrgo 2 3 import "fmt" 4 5 func (a *Arrf) Greater(b *Arrf) *Arrb { 6 if len(a.Data) == 0 || len(b.Data) == 0 { 7 panic(EMPTY_ARRAY_ERROR) 8 } 9 var t = EmptyB(a.Shape...) 10 for i, v := range a.Data { 11 t.Data[i] = v > b.Data[i] 12 } 13 return t 14 } 15 16 func (a *Arrf) GreaterEqual(b *Arrf) *Arrb { 17 if len(a.Data) == 0 || len(b.Data) == 0 { 18 panic(EMPTY_ARRAY_ERROR) 19 } 20 var t = EmptyB(a.Shape...) 21 for i, v := range a.Data { 22 t.Data[i] = v >= b.Data[i] 23 } 24 return t 25 } 26 27 func (a *Arrf) Less(b *Arrf) *Arrb { 28 if len(a.Data) == 0 || len(b.Data) == 0 { 29 panic(EMPTY_ARRAY_ERROR) 30 } 31 var t = EmptyB(a.Shape...) 32 for i, v := range a.Data { 33 t.Data[i] = v < b.Data[i] 34 } 35 return t 36 } 37 38 func (a *Arrf) LessEqual(b *Arrf) *Arrb { 39 if len(a.Data) == 0 || len(b.Data) == 0 { 40 panic(EMPTY_ARRAY_ERROR) 41 } 42 var t = EmptyB(a.Shape...) 43 for i, v := range a.Data { 44 t.Data[i] = v <= b.Data[i] 45 } 46 return t 47 } 48 49 //判断两个Array相对位置的元素是否相同,返回Arrb。 50 //如果两个Array任一为空,或者形状不同,则抛出异常。 51 func (a *Arrf) Equal(b *Arrf) *Arrb { 52 if len(a.Data) == 0 || len(b.Data) == 0 { 53 fmt.Println("empty array.") 54 panic(EMPTY_ARRAY_ERROR) 55 } 56 if !SameIntSlice(a.Shape, b.Shape) { 57 fmt.Println("Shape not same.") 58 panic(SHAPE_ERROR) 59 } 60 var t = EmptyB(a.Shape...) 61 for i, v := range a.Data { 62 t.Data[i] = v == b.Data[i] 63 } 64 return t 65 } 66 67 func (a *Arrf) NotEqual(b *Arrf) *Arrb { 68 if len(a.Data) == 0 || len(b.Data) == 0 { 69 panic(EMPTY_ARRAY_ERROR) 70 } 71 var t = EmptyB(a.Shape...) 72 for i, v := range a.Data { 73 t.Data[i] = v != b.Data[i] 74 } 75 return t 76 } 77 func Greater(a, b *Arrf) *Arrb { 78 return a.Greater(b) 79 } 80 81 func GreaterEqual(a, b *Arrf) *Arrb { 82 return a.GreaterEqual(b) 83 } 84 85 func Less(a, b *Arrf) *Arrb { 86 return a.Less(b) 87 } 88 89 func LessEqual(a, b *Arrf) *Arrb { 90 return a.LessEqual(b) 91 } 92 93 func Equal(a, b *Arrf) *Arrb { 94 return a.Equal(b) 95 } 96 97 func NotEqual(a, b *Arrf) *Arrb { 98 return a.NotEqual(b) 99 } 100 101 func (a *Arrf) Sort(axis ...int) *Arrf { 102 ax := -1 103 if len(axis) == 0 { 104 ax = a.Ndims() - 1 105 } else { 106 ax = axis[0] 107 } 108 109 axisShape, axisSt, axis1St := a.Shape[ax], a.Strides[ax], a.Strides[ax+1] 110 if axis1St == 1 { 111 Hsort(axisSt, a.Data) 112 } else { 113 Vsort(axis1St, a.Data[0:axisShape*axis1St]) 114 } 115 116 return a 117 } 118 119 func Sort(a *Arrf, axis ...int) *Arrf { 120 return a.Copy().Sort(axis...) 121 } 122 123 func (a *Arrf) Size() int { 124 return ProductIntSlice(a.Shape) 125 }