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  }