numo-narray 0.9.1.4 → 0.9.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +12 -6
 - data/Rakefile +4 -63
 - data/ext/numo/narray/array.c +35 -32
 - data/ext/numo/narray/data.c +40 -43
 - data/ext/numo/narray/depend.erb +6 -10
 - data/ext/numo/narray/extconf.rb +24 -21
 - data/ext/numo/narray/gen/cogen.rb +2 -2
 - data/ext/numo/narray/gen/narray_def.rb +5 -1
 - data/ext/numo/narray/gen/spec.rb +17 -7
 - data/ext/numo/narray/gen/tmpl/accum.c +2 -2
 - data/ext/numo/narray/gen/tmpl/accum_arg.c +88 -0
 - data/ext/numo/narray/gen/tmpl/accum_binary.c +1 -1
 - data/ext/numo/narray/gen/tmpl/accum_index.c +25 -14
 - data/ext/numo/narray/gen/tmpl/alloc_func.c +4 -1
 - data/ext/numo/narray/gen/tmpl/allocate.c +1 -0
 - data/ext/numo/narray/gen/tmpl/aref.c +5 -35
 - data/ext/numo/narray/gen/tmpl/aset.c +7 -37
 - data/ext/numo/narray/gen/tmpl/bincount.c +7 -7
 - data/ext/numo/narray/gen/tmpl/cast.c +7 -0
 - data/ext/numo/narray/gen/tmpl/clip.c +11 -15
 - data/ext/numo/narray/gen/tmpl/cum.c +1 -1
 - data/ext/numo/narray/gen/tmpl/each.c +4 -2
 - data/ext/numo/narray/gen/tmpl/each_with_index.c +5 -2
 - data/ext/numo/narray/gen/tmpl/lib.c +2 -2
 - data/ext/numo/narray/gen/tmpl/logseq.c +6 -5
 - data/ext/numo/narray/gen/tmpl/map_with_index.c +5 -6
 - data/ext/numo/narray/gen/tmpl/median.c +2 -2
 - data/ext/numo/narray/gen/tmpl/minmax.c +1 -1
 - data/ext/numo/narray/gen/tmpl/poly.c +4 -4
 - data/ext/numo/narray/gen/tmpl/qsort.c +1 -1
 - data/ext/numo/narray/gen/tmpl/rand.c +8 -6
 - data/ext/numo/narray/gen/tmpl/rand_norm.c +18 -16
 - data/ext/numo/narray/gen/tmpl/seq.c +5 -4
 - data/ext/numo/narray/gen/tmpl/sort.c +3 -3
 - data/ext/numo/narray/gen/tmpl/sort_index.c +2 -2
 - data/ext/numo/narray/gen/tmpl/store_array.c +14 -2
 - data/ext/numo/narray/gen/tmpl/unary_s.c +55 -31
 - data/ext/numo/narray/gen/tmpl_bit/allocate.c +1 -0
 - data/ext/numo/narray/gen/tmpl_bit/aref.c +22 -30
 - data/ext/numo/narray/gen/tmpl_bit/aset.c +20 -34
 - data/ext/numo/narray/gen/tmpl_bit/binary.c +48 -14
 - data/ext/numo/narray/gen/tmpl_bit/bit_count.c +5 -0
 - data/ext/numo/narray/gen/tmpl_bit/bit_reduce.c +5 -0
 - data/ext/numo/narray/gen/tmpl_bit/store_array.c +14 -2
 - data/ext/numo/narray/gen/tmpl_bit/store_bit.c +27 -9
 - data/ext/numo/narray/gen/tmpl_bit/unary.c +25 -7
 - data/ext/numo/narray/index.c +363 -59
 - data/ext/numo/narray/math.c +2 -2
 - data/ext/numo/narray/narray.c +151 -36
 - data/ext/numo/narray/ndloop.c +4 -4
 - data/ext/numo/narray/numo/intern.h +3 -2
 - data/ext/numo/narray/numo/narray.h +37 -14
 - data/ext/numo/narray/numo/ndloop.h +2 -2
 - data/ext/numo/narray/numo/template.h +11 -15
 - data/ext/numo/narray/numo/types/complex.h +2 -2
 - data/ext/numo/narray/numo/types/int16.h +5 -2
 - data/ext/numo/narray/numo/types/int32.h +0 -1
 - data/ext/numo/narray/numo/types/int64.h +0 -1
 - data/ext/numo/narray/numo/types/int8.h +1 -2
 - data/ext/numo/narray/numo/types/uint16.h +5 -2
 - data/ext/numo/narray/numo/types/uint32.h +0 -1
 - data/ext/numo/narray/numo/types/uint64.h +0 -1
 - data/ext/numo/narray/numo/types/uint8.h +1 -2
 - data/ext/numo/narray/numo/types/xint_macro.h +2 -0
 - data/ext/numo/narray/step.c +58 -252
 - data/ext/numo/narray/struct.c +3 -3
 - data/lib/numo/narray.rb +1 -7
 - data/lib/numo/narray/extra.rb +214 -213
 - data/numo-narray.gemspec +7 -8
 - metadata +17 -36
 
    
        data/ext/numo/narray/struct.c
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            /*
         
     | 
| 
       2 
2 
     | 
    
         
             
              strut.c
         
     | 
| 
       3 
     | 
    
         
            -
              Numerical Array  
     | 
| 
       4 
     | 
    
         
            -
                (C)  
     | 
| 
      
 3 
     | 
    
         
            +
              Ruby/Numo::NArray - Numerical Array class for Ruby
         
     | 
| 
      
 4 
     | 
    
         
            +
                Copyright (C) 1999-2020 Masahiro TANAKA
         
     | 
| 
       5 
5 
     | 
    
         
             
            */
         
     | 
| 
       6 
6 
     | 
    
         
             
            #include <ruby.h>
         
     | 
| 
       7 
7 
     | 
    
         
             
            #include "numo/narray.h"
         
     | 
| 
         @@ -813,7 +813,7 @@ nst_s_add_type(int argc, VALUE *argv, VALUE mod) 
     | 
|
| 
       813 
813 
     | 
    
         | 
| 
       814 
814 
     | 
    
         
             
            #define NST_TYPEDEF(tpname,tpclass)                 \
         
     | 
| 
       815 
815 
     | 
    
         
             
            static VALUE                                        \
         
     | 
| 
       816 
     | 
    
         
            -
            nst_s_##tpname( 
     | 
| 
      
 816 
     | 
    
         
            +
            nst_s_##tpname(int argc, VALUE *argv, VALUE mod)    \
         
     | 
| 
       817 
817 
     | 
    
         
             
            {   nstruct_add_type(tpclass,argc,argv,mod);        \
         
     | 
| 
       818 
818 
     | 
    
         
             
                return Qnil;                                    \
         
     | 
| 
       819 
819 
     | 
    
         
             
            }
         
     | 
    
        data/lib/numo/narray.rb
    CHANGED
    
    
    
        data/lib/numo/narray/extra.rb
    CHANGED
    
    | 
         @@ -43,75 +43,25 @@ module Numo 
     | 
|
| 
       43 
43 
     | 
    
         
             
                  reverse(0)
         
     | 
| 
       44 
44 
     | 
    
         
             
                end
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                # Multi-dimensional array indexing.
         
     | 
| 
       47 
     | 
    
         
            -
                # Same as [] for one-dimensional NArray.
         
     | 
| 
       48 
     | 
    
         
            -
                # Similar to numpy's tuple indexing, i.e., `a[[1,2,..],[3,4,..]]`
         
     | 
| 
       49 
     | 
    
         
            -
                # (This method will be rewritten in C)
         
     | 
| 
       50 
     | 
    
         
            -
                # @return [Numo::NArray] one-dimensional view of self.
         
     | 
| 
       51 
     | 
    
         
            -
                # @example
         
     | 
| 
       52 
     | 
    
         
            -
                #   p x = Numo::DFloat.new(3,3,3).seq
         
     | 
| 
       53 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[3,3,3]
         
     | 
| 
       54 
     | 
    
         
            -
                #   # [[[0, 1, 2],
         
     | 
| 
       55 
     | 
    
         
            -
                #   #   [3, 4, 5],
         
     | 
| 
       56 
     | 
    
         
            -
                #   #   [6, 7, 8]],
         
     | 
| 
       57 
     | 
    
         
            -
                #   #  [[9, 10, 11],
         
     | 
| 
       58 
     | 
    
         
            -
                #   #   [12, 13, 14],
         
     | 
| 
       59 
     | 
    
         
            -
                #   #   [15, 16, 17]],
         
     | 
| 
       60 
     | 
    
         
            -
                #   #  [[18, 19, 20],
         
     | 
| 
       61 
     | 
    
         
            -
                #   #   [21, 22, 23],
         
     | 
| 
       62 
     | 
    
         
            -
                #   #   [24, 25, 26]]]
         
     | 
| 
       63 
     | 
    
         
            -
                #
         
     | 
| 
       64 
     | 
    
         
            -
                #   p x.at([0,1,2],[0,1,2],[-1,-2,-3])
         
     | 
| 
       65 
     | 
    
         
            -
                #   # Numo::DFloat(view)#shape=[3]
         
     | 
| 
       66 
     | 
    
         
            -
                #   # [2, 13, 24]
         
     | 
| 
       67 
     | 
    
         
            -
                def at(*indices)
         
     | 
| 
       68 
     | 
    
         
            -
                  if indices.size != ndim
         
     | 
| 
       69 
     | 
    
         
            -
                    raise DimensionError, "argument length does not match dimension size"
         
     | 
| 
       70 
     | 
    
         
            -
                  end
         
     | 
| 
       71 
     | 
    
         
            -
                  idx = nil
         
     | 
| 
       72 
     | 
    
         
            -
                  stride = 1
         
     | 
| 
       73 
     | 
    
         
            -
                  (indices.size-1).downto(0) do |i|
         
     | 
| 
       74 
     | 
    
         
            -
                    ix = Int64.cast(indices[i])
         
     | 
| 
       75 
     | 
    
         
            -
                    if ix.ndim != 1
         
     | 
| 
       76 
     | 
    
         
            -
                      raise DimensionError, "index array is not one-dimensional"
         
     | 
| 
       77 
     | 
    
         
            -
                    end
         
     | 
| 
       78 
     | 
    
         
            -
                    ix[ix < 0] += shape[i]
         
     | 
| 
       79 
     | 
    
         
            -
                    if ((ix < 0) & (ix >= shape[i])).any?
         
     | 
| 
       80 
     | 
    
         
            -
                      raise IndexError, "index array is out of range"
         
     | 
| 
       81 
     | 
    
         
            -
                    end
         
     | 
| 
       82 
     | 
    
         
            -
                    if idx
         
     | 
| 
       83 
     | 
    
         
            -
                      if idx.size != ix.size
         
     | 
| 
       84 
     | 
    
         
            -
                        raise ShapeError, "index array sizes mismatch"
         
     | 
| 
       85 
     | 
    
         
            -
                      end
         
     | 
| 
       86 
     | 
    
         
            -
                      idx += ix * stride
         
     | 
| 
       87 
     | 
    
         
            -
                      stride *= shape[i]
         
     | 
| 
       88 
     | 
    
         
            -
                    else
         
     | 
| 
       89 
     | 
    
         
            -
                      idx = ix
         
     | 
| 
       90 
     | 
    
         
            -
                      stride = shape[i]
         
     | 
| 
       91 
     | 
    
         
            -
                    end
         
     | 
| 
       92 
     | 
    
         
            -
                  end
         
     | 
| 
       93 
     | 
    
         
            -
                  self[idx]
         
     | 
| 
       94 
     | 
    
         
            -
                end
         
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
46 
     | 
    
         
             
                # Rotate in the plane specified by axes.
         
     | 
| 
       97 
47 
     | 
    
         
             
                # @example
         
     | 
| 
       98 
     | 
    
         
            -
                #    
     | 
| 
       99 
     | 
    
         
            -
                #   # Numo::Int32#shape=[2,2]
         
     | 
| 
      
 48 
     | 
    
         
            +
                #   a = Numo::Int32.new(2,2).seq
         
     | 
| 
      
 49 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[2,2]
         
     | 
| 
       100 
50 
     | 
    
         
             
                #   # [[0, 1],
         
     | 
| 
       101 
51 
     | 
    
         
             
                #   #  [2, 3]]
         
     | 
| 
       102 
52 
     | 
    
         
             
                #
         
     | 
| 
       103 
     | 
    
         
            -
                #    
     | 
| 
       104 
     | 
    
         
            -
                #   # Numo::Int32(view)#shape=[2,2]
         
     | 
| 
      
 53 
     | 
    
         
            +
                #   a.rot90
         
     | 
| 
      
 54 
     | 
    
         
            +
                #   # => Numo::Int32(view)#shape=[2,2]
         
     | 
| 
       105 
55 
     | 
    
         
             
                #   # [[1, 3],
         
     | 
| 
       106 
56 
     | 
    
         
             
                #   #  [0, 2]]
         
     | 
| 
       107 
57 
     | 
    
         
             
                #
         
     | 
| 
       108 
     | 
    
         
            -
                #    
     | 
| 
       109 
     | 
    
         
            -
                #   # Numo::Int32(view)#shape=[2,2]
         
     | 
| 
      
 58 
     | 
    
         
            +
                #   a.rot90(2)
         
     | 
| 
      
 59 
     | 
    
         
            +
                #   # => Numo::Int32(view)#shape=[2,2]
         
     | 
| 
       110 
60 
     | 
    
         
             
                #   # [[3, 2],
         
     | 
| 
       111 
61 
     | 
    
         
             
                #   #  [1, 0]]
         
     | 
| 
       112 
62 
     | 
    
         
             
                #
         
     | 
| 
       113 
     | 
    
         
            -
                #    
     | 
| 
       114 
     | 
    
         
            -
                #   # Numo::Int32(view)#shape=[2,2]
         
     | 
| 
      
 63 
     | 
    
         
            +
                #   a.rot90(3)
         
     | 
| 
      
 64 
     | 
    
         
            +
                #   # => Numo::Int32(view)#shape=[2,2]
         
     | 
| 
       115 
65 
     | 
    
         
             
                #   # [[2, 0],
         
     | 
| 
       116 
66 
     | 
    
         
             
                #   #  [3, 1]]
         
     | 
| 
       117 
67 
     | 
    
         
             
                def rot90(k=1,axes=[0,1])
         
     | 
| 
         @@ -156,7 +106,19 @@ module Numo 
     | 
|
| 
       156 
106 
     | 
    
         | 
| 
       157 
107 
     | 
    
         
             
                # Convert the argument to an narray if not an narray.
         
     | 
| 
       158 
108 
     | 
    
         
             
                def self.cast(a)
         
     | 
| 
       159 
     | 
    
         
            -
                   
     | 
| 
      
 109 
     | 
    
         
            +
                  case a
         
     | 
| 
      
 110 
     | 
    
         
            +
                  when NArray
         
     | 
| 
      
 111 
     | 
    
         
            +
                    a
         
     | 
| 
      
 112 
     | 
    
         
            +
                  when Array,Numeric
         
     | 
| 
      
 113 
     | 
    
         
            +
                    NArray.array_type(a).cast(a)
         
     | 
| 
      
 114 
     | 
    
         
            +
                  else
         
     | 
| 
      
 115 
     | 
    
         
            +
                    if a.respond_to?(:to_a)
         
     | 
| 
      
 116 
     | 
    
         
            +
                      a = a.to_a
         
     | 
| 
      
 117 
     | 
    
         
            +
                      NArray.array_type(a).cast(a)
         
     | 
| 
      
 118 
     | 
    
         
            +
                    else
         
     | 
| 
      
 119 
     | 
    
         
            +
                      raise TypeError,"invalid type for NArray"
         
     | 
| 
      
 120 
     | 
    
         
            +
                    end
         
     | 
| 
      
 121 
     | 
    
         
            +
                  end
         
     | 
| 
       160 
122 
     | 
    
         
             
                end
         
     | 
| 
       161 
123 
     | 
    
         | 
| 
       162 
124 
     | 
    
         
             
                def self.asarray(a)
         
     | 
| 
         @@ -177,10 +139,10 @@ module Numo 
     | 
|
| 
       177 
139 
     | 
    
         
             
                #    4 9 7
         
     | 
| 
       178 
140 
     | 
    
         
             
                #    2 -1 6
         
     | 
| 
       179 
141 
     | 
    
         
             
                #   ]
         
     | 
| 
       180 
     | 
    
         
            -
                #   => Numo::DFloat#shape=[3,3]
         
     | 
| 
       181 
     | 
    
         
            -
                #   [[2, -3, 5],
         
     | 
| 
       182 
     | 
    
         
            -
                # 
     | 
| 
       183 
     | 
    
         
            -
                # 
     | 
| 
      
 142 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[3,3]
         
     | 
| 
      
 143 
     | 
    
         
            +
                #   # [[2, -3, 5],
         
     | 
| 
      
 144 
     | 
    
         
            +
                #   #  [4, 9, 7],
         
     | 
| 
      
 145 
     | 
    
         
            +
                #   #  [2, -1, 6]]
         
     | 
| 
       184 
146 
     | 
    
         | 
| 
       185 
147 
     | 
    
         
             
                def self.parse(str, split1d:/\s+/, split2d:/;?$|;/,
         
     | 
| 
       186 
148 
     | 
    
         
             
                               split3d:/\s*\n(\s*\n)+/m)
         
     | 
| 
         @@ -210,7 +172,7 @@ module Numo 
     | 
|
| 
       210 
172 
     | 
    
         | 
| 
       211 
173 
     | 
    
         | 
| 
       212 
174 
     | 
    
         
             
                # Iterate over an axis
         
     | 
| 
       213 
     | 
    
         
            -
                # @ 
     | 
| 
      
 175 
     | 
    
         
            +
                # @example
         
     | 
| 
       214 
176 
     | 
    
         
             
                #   > a = Numo::DFloat.new(2,2,2).seq
         
     | 
| 
       215 
177 
     | 
    
         
             
                #   > p a
         
     | 
| 
       216 
178 
     | 
    
         
             
                #   Numo::DFloat#shape=[2,2,2]
         
     | 
| 
         @@ -260,19 +222,19 @@ module Numo 
     | 
|
| 
       260 
222 
     | 
    
         
             
                # Append values to the end of an narray.
         
     | 
| 
       261 
223 
     | 
    
         
             
                # @example
         
     | 
| 
       262 
224 
     | 
    
         
             
                #   a = Numo::DFloat[1, 2, 3]
         
     | 
| 
       263 
     | 
    
         
            -
                #    
     | 
| 
       264 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[9]
         
     | 
| 
      
 225 
     | 
    
         
            +
                #   a.append([[4, 5, 6], [7, 8, 9]])
         
     | 
| 
      
 226 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[9]
         
     | 
| 
       265 
227 
     | 
    
         
             
                #   # [1, 2, 3, 4, 5, 6, 7, 8, 9]
         
     | 
| 
       266 
228 
     | 
    
         
             
                #
         
     | 
| 
       267 
229 
     | 
    
         
             
                #   a = Numo::DFloat[[1, 2, 3]]
         
     | 
| 
       268 
     | 
    
         
            -
                #    
     | 
| 
       269 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[3,3]
         
     | 
| 
      
 230 
     | 
    
         
            +
                #   a.append([[4, 5, 6], [7, 8, 9]],axis:0)
         
     | 
| 
      
 231 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[3,3]
         
     | 
| 
       270 
232 
     | 
    
         
             
                #   # [[1, 2, 3],
         
     | 
| 
       271 
233 
     | 
    
         
             
                #   #  [4, 5, 6],
         
     | 
| 
       272 
234 
     | 
    
         
             
                #   #  [7, 8, 9]]
         
     | 
| 
       273 
235 
     | 
    
         
             
                #
         
     | 
| 
       274 
236 
     | 
    
         
             
                #   a = Numo::DFloat[[1, 2, 3], [4, 5, 6]]
         
     | 
| 
       275 
     | 
    
         
            -
                #    
     | 
| 
      
 237 
     | 
    
         
            +
                #   a.append([7, 8, 9], axis:0)
         
     | 
| 
       276 
238 
     | 
    
         
             
                #   # in `append': dimension mismatch (Numo::NArray::DimensionError)
         
     | 
| 
       277 
239 
     | 
    
         | 
| 
       278 
240 
     | 
    
         
             
                def append(other,axis:nil)
         
     | 
| 
         @@ -295,19 +257,19 @@ module Numo 
     | 
|
| 
       295 
257 
     | 
    
         | 
| 
       296 
258 
     | 
    
         
             
                # @example
         
     | 
| 
       297 
259 
     | 
    
         
             
                #   a = Numo::DFloat[[1,2,3,4], [5,6,7,8], [9,10,11,12]]
         
     | 
| 
       298 
     | 
    
         
            -
                #    
     | 
| 
       299 
     | 
    
         
            -
                #   # Numo::DFloat(view)#shape=[2,4]
         
     | 
| 
      
 260 
     | 
    
         
            +
                #   a.delete(1,0)
         
     | 
| 
      
 261 
     | 
    
         
            +
                #   # => Numo::DFloat(view)#shape=[2,4]
         
     | 
| 
       300 
262 
     | 
    
         
             
                #   # [[1, 2, 3, 4],
         
     | 
| 
       301 
263 
     | 
    
         
             
                #   #  [9, 10, 11, 12]]
         
     | 
| 
       302 
264 
     | 
    
         
             
                #
         
     | 
| 
       303 
     | 
    
         
            -
                #    
     | 
| 
       304 
     | 
    
         
            -
                #   # Numo::DFloat(view)#shape=[3,2]
         
     | 
| 
      
 265 
     | 
    
         
            +
                #   a.delete((0..-1).step(2),1)
         
     | 
| 
      
 266 
     | 
    
         
            +
                #   # => Numo::DFloat(view)#shape=[3,2]
         
     | 
| 
       305 
267 
     | 
    
         
             
                #   # [[2, 4],
         
     | 
| 
       306 
268 
     | 
    
         
             
                #   #  [6, 8],
         
     | 
| 
       307 
269 
     | 
    
         
             
                #   #  [10, 12]]
         
     | 
| 
       308 
270 
     | 
    
         
             
                #
         
     | 
| 
       309 
     | 
    
         
            -
                #    
     | 
| 
       310 
     | 
    
         
            -
                #   # Numo::DFloat(view)#shape=[9]
         
     | 
| 
      
 271 
     | 
    
         
            +
                #   a.delete([1,3,5])
         
     | 
| 
      
 272 
     | 
    
         
            +
                #   # => Numo::DFloat(view)#shape=[9]
         
     | 
| 
       311 
273 
     | 
    
         
             
                #   # [1, 3, 5, 7, 8, 9, 10, 11, 12]
         
     | 
| 
       312 
274 
     | 
    
         | 
| 
       313 
275 
     | 
    
         
             
                def delete(indice,axis=nil)
         
     | 
| 
         @@ -326,72 +288,72 @@ module Numo 
     | 
|
| 
       326 
288 
     | 
    
         | 
| 
       327 
289 
     | 
    
         
             
                # Insert values along the axis before the indices.
         
     | 
| 
       328 
290 
     | 
    
         
             
                # @example
         
     | 
| 
       329 
     | 
    
         
            -
                #    
     | 
| 
      
 291 
     | 
    
         
            +
                #   a = Numo::DFloat[[1, 2], [3, 4]]
         
     | 
| 
       330 
292 
     | 
    
         
             
                #   a = Numo::Int32[[1, 1], [2, 2], [3, 3]]
         
     | 
| 
       331 
293 
     | 
    
         
             
                #
         
     | 
| 
       332 
     | 
    
         
            -
                #    
     | 
| 
       333 
     | 
    
         
            -
                #   # Numo::Int32#shape=[7]
         
     | 
| 
      
 294 
     | 
    
         
            +
                #   a.insert(1,5)
         
     | 
| 
      
 295 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[7]
         
     | 
| 
       334 
296 
     | 
    
         
             
                #   # [1, 5, 1, 2, 2, 3, 3]
         
     | 
| 
       335 
297 
     | 
    
         
             
                #
         
     | 
| 
       336 
     | 
    
         
            -
                #    
     | 
| 
       337 
     | 
    
         
            -
                #   # Numo::Int32#shape=[3,3]
         
     | 
| 
      
 298 
     | 
    
         
            +
                #   a.insert(1, 5, axis:1)
         
     | 
| 
      
 299 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[3,3]
         
     | 
| 
       338 
300 
     | 
    
         
             
                #   # [[1, 5, 1],
         
     | 
| 
       339 
301 
     | 
    
         
             
                #   #  [2, 5, 2],
         
     | 
| 
       340 
302 
     | 
    
         
             
                #   #  [3, 5, 3]]
         
     | 
| 
       341 
303 
     | 
    
         
             
                #
         
     | 
| 
       342 
     | 
    
         
            -
                #    
     | 
| 
       343 
     | 
    
         
            -
                #   # Numo::Int32#shape=[3,3]
         
     | 
| 
      
 304 
     | 
    
         
            +
                #   a.insert([1], [[11],[12],[13]], axis:1)
         
     | 
| 
      
 305 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[3,3]
         
     | 
| 
       344 
306 
     | 
    
         
             
                #   # [[1, 11, 1],
         
     | 
| 
       345 
307 
     | 
    
         
             
                #   #  [2, 12, 2],
         
     | 
| 
       346 
308 
     | 
    
         
             
                #   #  [3, 13, 3]]
         
     | 
| 
       347 
309 
     | 
    
         
             
                #
         
     | 
| 
       348 
     | 
    
         
            -
                #    
     | 
| 
       349 
     | 
    
         
            -
                #   # Numo::Int32#shape=[3,3]
         
     | 
| 
      
 310 
     | 
    
         
            +
                #   a.insert(1, [11, 12, 13], axis:1)
         
     | 
| 
      
 311 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[3,3]
         
     | 
| 
       350 
312 
     | 
    
         
             
                #   # [[1, 11, 1],
         
     | 
| 
       351 
313 
     | 
    
         
             
                #   #  [2, 12, 2],
         
     | 
| 
       352 
314 
     | 
    
         
             
                #   #  [3, 13, 3]]
         
     | 
| 
       353 
315 
     | 
    
         
             
                #
         
     | 
| 
       354 
     | 
    
         
            -
                #    
     | 
| 
       355 
     | 
    
         
            -
                #   # Numo::Int32#shape=[3,5]
         
     | 
| 
      
 316 
     | 
    
         
            +
                #   a.insert([1], [11, 12, 13], axis:1)
         
     | 
| 
      
 317 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[3,5]
         
     | 
| 
       356 
318 
     | 
    
         
             
                #   # [[1, 11, 12, 13, 1],
         
     | 
| 
       357 
319 
     | 
    
         
             
                #   #  [2, 11, 12, 13, 2],
         
     | 
| 
       358 
320 
     | 
    
         
             
                #   #  [3, 11, 12, 13, 3]]
         
     | 
| 
       359 
321 
     | 
    
         
             
                #
         
     | 
| 
       360 
     | 
    
         
            -
                #    
     | 
| 
       361 
     | 
    
         
            -
                #   # Numo::Int32(view)#shape=[6]
         
     | 
| 
      
 322 
     | 
    
         
            +
                #   b = a.flatten
         
     | 
| 
      
 323 
     | 
    
         
            +
                #   # => Numo::Int32(view)#shape=[6]
         
     | 
| 
       362 
324 
     | 
    
         
             
                #   # [1, 1, 2, 2, 3, 3]
         
     | 
| 
       363 
325 
     | 
    
         
             
                #
         
     | 
| 
       364 
     | 
    
         
            -
                #    
     | 
| 
       365 
     | 
    
         
            -
                #   # Numo::Int32#shape=[8]
         
     | 
| 
      
 326 
     | 
    
         
            +
                #   b.insert(2,[15,16])
         
     | 
| 
      
 327 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[8]
         
     | 
| 
       366 
328 
     | 
    
         
             
                #   # [1, 1, 15, 16, 2, 2, 3, 3]
         
     | 
| 
       367 
329 
     | 
    
         
             
                #
         
     | 
| 
       368 
     | 
    
         
            -
                #    
     | 
| 
       369 
     | 
    
         
            -
                #   # Numo::Int32#shape=[8]
         
     | 
| 
      
 330 
     | 
    
         
            +
                #   b.insert([2,2],[15,16])
         
     | 
| 
      
 331 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[8]
         
     | 
| 
       370 
332 
     | 
    
         
             
                #   # [1, 1, 15, 16, 2, 2, 3, 3]
         
     | 
| 
       371 
333 
     | 
    
         
             
                #
         
     | 
| 
       372 
     | 
    
         
            -
                #    
     | 
| 
       373 
     | 
    
         
            -
                #   # Numo::Int32#shape=[8]
         
     | 
| 
      
 334 
     | 
    
         
            +
                #   b.insert([2,1],[15,16])
         
     | 
| 
      
 335 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[8]
         
     | 
| 
       374 
336 
     | 
    
         
             
                #   # [1, 16, 1, 15, 2, 2, 3, 3]
         
     | 
| 
       375 
337 
     | 
    
         
             
                #
         
     | 
| 
       376 
     | 
    
         
            -
                #    
     | 
| 
       377 
     | 
    
         
            -
                #   # Numo::Int32#shape=[9]
         
     | 
| 
      
 338 
     | 
    
         
            +
                #   b.insert([2,0,1],[15,16,17])
         
     | 
| 
      
 339 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[9]
         
     | 
| 
       378 
340 
     | 
    
         
             
                #   # [16, 1, 17, 1, 15, 2, 2, 3, 3]
         
     | 
| 
       379 
341 
     | 
    
         
             
                #
         
     | 
| 
       380 
     | 
    
         
            -
                #    
     | 
| 
       381 
     | 
    
         
            -
                #   # Numo::Int32#shape=[8]
         
     | 
| 
      
 342 
     | 
    
         
            +
                #   b.insert(2..3, [15, 16])
         
     | 
| 
      
 343 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[8]
         
     | 
| 
       382 
344 
     | 
    
         
             
                #   # [1, 1, 15, 2, 16, 2, 3, 3]
         
     | 
| 
       383 
345 
     | 
    
         
             
                #
         
     | 
| 
       384 
     | 
    
         
            -
                #    
     | 
| 
       385 
     | 
    
         
            -
                #   # Numo::Int32#shape=[8]
         
     | 
| 
      
 346 
     | 
    
         
            +
                #   b.insert(2, [7.13, 0.5])
         
     | 
| 
      
 347 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[8]
         
     | 
| 
       386 
348 
     | 
    
         
             
                #   # [1, 1, 7, 0, 2, 2, 3, 3]
         
     | 
| 
       387 
349 
     | 
    
         
             
                #
         
     | 
| 
       388 
     | 
    
         
            -
                #    
     | 
| 
       389 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[2,4]
         
     | 
| 
      
 350 
     | 
    
         
            +
                #   x = Numo::DFloat.new(2,4).seq
         
     | 
| 
      
 351 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[2,4]
         
     | 
| 
       390 
352 
     | 
    
         
             
                #   # [[0, 1, 2, 3],
         
     | 
| 
       391 
353 
     | 
    
         
             
                #   #  [4, 5, 6, 7]]
         
     | 
| 
       392 
354 
     | 
    
         
             
                #
         
     | 
| 
       393 
     | 
    
         
            -
                #    
     | 
| 
       394 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[2,6]
         
     | 
| 
      
 355 
     | 
    
         
            +
                #   x.insert([1,3],999,axis:1)
         
     | 
| 
      
 356 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[2,6]
         
     | 
| 
       395 
357 
     | 
    
         
             
                #   # [[0, 999, 1, 2, 999, 3],
         
     | 
| 
       396 
358 
     | 
    
         
             
                #   #  [4, 999, 5, 6, 999, 7]]
         
     | 
| 
       397 
359 
     | 
    
         | 
| 
         @@ -441,23 +403,23 @@ module Numo 
     | 
|
| 
       441 
403 
     | 
    
         | 
| 
       442 
404 
     | 
    
         
             
                class << self
         
     | 
| 
       443 
405 
     | 
    
         
             
                # @example
         
     | 
| 
       444 
     | 
    
         
            -
                #    
     | 
| 
       445 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[2,2]
         
     | 
| 
      
 406 
     | 
    
         
            +
                #   a = Numo::DFloat[[1, 2], [3, 4]]
         
     | 
| 
      
 407 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[2,2]
         
     | 
| 
       446 
408 
     | 
    
         
             
                #   # [[1, 2],
         
     | 
| 
       447 
409 
     | 
    
         
             
                #   #  [3, 4]]
         
     | 
| 
       448 
410 
     | 
    
         
             
                #
         
     | 
| 
       449 
     | 
    
         
            -
                #    
     | 
| 
       450 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[1,2]
         
     | 
| 
      
 411 
     | 
    
         
            +
                #   b = Numo::DFloat[[5, 6]]
         
     | 
| 
      
 412 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[1,2]
         
     | 
| 
       451 
413 
     | 
    
         
             
                #   # [[5, 6]]
         
     | 
| 
       452 
414 
     | 
    
         
             
                #
         
     | 
| 
       453 
     | 
    
         
            -
                #    
     | 
| 
       454 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[3,2]
         
     | 
| 
      
 415 
     | 
    
         
            +
                #   Numo::NArray.concatenate([a,b],axis:0)
         
     | 
| 
      
 416 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[3,2]
         
     | 
| 
       455 
417 
     | 
    
         
             
                #   # [[1, 2],
         
     | 
| 
       456 
418 
     | 
    
         
             
                #   #  [3, 4],
         
     | 
| 
       457 
419 
     | 
    
         
             
                #   #  [5, 6]]
         
     | 
| 
       458 
420 
     | 
    
         
             
                #
         
     | 
| 
       459 
     | 
    
         
            -
                #    
     | 
| 
       460 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[2,3]
         
     | 
| 
      
 421 
     | 
    
         
            +
                #   Numo::NArray.concatenate([a,b.transpose], axis:1)
         
     | 
| 
      
 422 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[2,3]
         
     | 
| 
       461 
423 
     | 
    
         
             
                #   # [[1, 2, 5],
         
     | 
| 
       462 
424 
     | 
    
         
             
                #   #  [3, 4, 6]]
         
     | 
| 
       463 
425 
     | 
    
         | 
| 
         @@ -509,8 +471,10 @@ module Numo 
     | 
|
| 
       509 
471 
     | 
    
         
             
                  arrays.each do |a|
         
     | 
| 
       510 
472 
     | 
    
         
             
                    fst = lst
         
     | 
| 
       511 
473 
     | 
    
         
             
                    lst = fst + (a.shape[axis-nd]||1)
         
     | 
| 
       512 
     | 
    
         
            -
                     
     | 
| 
       513 
     | 
    
         
            -
             
     | 
| 
      
 474 
     | 
    
         
            +
                    if lst > fst
         
     | 
| 
      
 475 
     | 
    
         
            +
                      refs[axis] = fst...lst
         
     | 
| 
      
 476 
     | 
    
         
            +
                      result[*refs] = a
         
     | 
| 
      
 477 
     | 
    
         
            +
                    end
         
     | 
| 
       514 
478 
     | 
    
         
             
                  end
         
     | 
| 
       515 
479 
     | 
    
         
             
                  result
         
     | 
| 
       516 
480 
     | 
    
         
             
                end
         
     | 
| 
         @@ -519,15 +483,15 @@ module Numo 
     | 
|
| 
       519 
483 
     | 
    
         
             
                # @example
         
     | 
| 
       520 
484 
     | 
    
         
             
                #   a = Numo::Int32[1,2,3]
         
     | 
| 
       521 
485 
     | 
    
         
             
                #   b = Numo::Int32[2,3,4]
         
     | 
| 
       522 
     | 
    
         
            -
                #    
     | 
| 
       523 
     | 
    
         
            -
                #   # Numo::Int32#shape=[2,3]
         
     | 
| 
      
 486 
     | 
    
         
            +
                #   Numo::NArray.vstack([a,b])
         
     | 
| 
      
 487 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[2,3]
         
     | 
| 
       524 
488 
     | 
    
         
             
                #   # [[1, 2, 3],
         
     | 
| 
       525 
489 
     | 
    
         
             
                #   #  [2, 3, 4]]
         
     | 
| 
       526 
490 
     | 
    
         
             
                #
         
     | 
| 
       527 
491 
     | 
    
         
             
                #   a = Numo::Int32[[1],[2],[3]]
         
     | 
| 
       528 
492 
     | 
    
         
             
                #   b = Numo::Int32[[2],[3],[4]]
         
     | 
| 
       529 
     | 
    
         
            -
                #    
     | 
| 
       530 
     | 
    
         
            -
                #   # Numo::Int32#shape=[6,1]
         
     | 
| 
      
 493 
     | 
    
         
            +
                #   Numo::NArray.vstack([a,b])
         
     | 
| 
      
 494 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[6,1]
         
     | 
| 
       531 
495 
     | 
    
         
             
                #   # [[1],
         
     | 
| 
       532 
496 
     | 
    
         
             
                #   #  [2],
         
     | 
| 
       533 
497 
     | 
    
         
             
                #   #  [3],
         
     | 
| 
         @@ -546,14 +510,14 @@ module Numo 
     | 
|
| 
       546 
510 
     | 
    
         
             
                # @example
         
     | 
| 
       547 
511 
     | 
    
         
             
                #   a = Numo::Int32[1,2,3]
         
     | 
| 
       548 
512 
     | 
    
         
             
                #   b = Numo::Int32[2,3,4]
         
     | 
| 
       549 
     | 
    
         
            -
                #    
     | 
| 
       550 
     | 
    
         
            -
                #   # Numo::Int32#shape=[6]
         
     | 
| 
      
 513 
     | 
    
         
            +
                #   Numo::NArray.hstack([a,b])
         
     | 
| 
      
 514 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[6]
         
     | 
| 
       551 
515 
     | 
    
         
             
                #   # [1, 2, 3, 2, 3, 4]
         
     | 
| 
       552 
516 
     | 
    
         
             
                #
         
     | 
| 
       553 
517 
     | 
    
         
             
                #   a = Numo::Int32[[1],[2],[3]]
         
     | 
| 
       554 
518 
     | 
    
         
             
                #   b = Numo::Int32[[2],[3],[4]]
         
     | 
| 
       555 
     | 
    
         
            -
                #    
     | 
| 
       556 
     | 
    
         
            -
                #   # Numo::Int32#shape=[3,2]
         
     | 
| 
      
 519 
     | 
    
         
            +
                #   Numo::NArray.hstack([a,b])
         
     | 
| 
      
 520 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[3,2]
         
     | 
| 
       557 
521 
     | 
    
         
             
                #   # [[1, 2],
         
     | 
| 
       558 
522 
     | 
    
         
             
                #   #  [2, 3],
         
     | 
| 
       559 
523 
     | 
    
         
             
                #   #  [3, 4]]
         
     | 
| 
         @@ -574,16 +538,16 @@ module Numo 
     | 
|
| 
       574 
538 
     | 
    
         
             
                # @example
         
     | 
| 
       575 
539 
     | 
    
         
             
                #   a = Numo::Int32[1,2,3]
         
     | 
| 
       576 
540 
     | 
    
         
             
                #   b = Numo::Int32[2,3,4]
         
     | 
| 
       577 
     | 
    
         
            -
                #    
     | 
| 
       578 
     | 
    
         
            -
                #   # Numo::Int32#shape=[1,3,2]
         
     | 
| 
      
 541 
     | 
    
         
            +
                #   Numo::NArray.dstack([a,b])
         
     | 
| 
      
 542 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[1,3,2]
         
     | 
| 
       579 
543 
     | 
    
         
             
                #   # [[[1, 2],
         
     | 
| 
       580 
544 
     | 
    
         
             
                #   #   [2, 3],
         
     | 
| 
       581 
545 
     | 
    
         
             
                #   #   [3, 4]]]
         
     | 
| 
       582 
546 
     | 
    
         
             
                #
         
     | 
| 
       583 
547 
     | 
    
         
             
                #   a = Numo::Int32[[1],[2],[3]]
         
     | 
| 
       584 
548 
     | 
    
         
             
                #   b = Numo::Int32[[2],[3],[4]]
         
     | 
| 
       585 
     | 
    
         
            -
                #    
     | 
| 
       586 
     | 
    
         
            -
                #   # Numo::Int32#shape=[3,1,2]
         
     | 
| 
      
 549 
     | 
    
         
            +
                #   Numo::NArray.dstack([a,b])
         
     | 
| 
      
 550 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[3,1,2]
         
     | 
| 
       587 
551 
     | 
    
         
             
                #   # [[[1, 2]],
         
     | 
| 
       588 
552 
     | 
    
         
             
                #   #  [[2, 3]],
         
     | 
| 
       589 
553 
     | 
    
         
             
                #   #  [[3, 4]]]
         
     | 
| 
         @@ -599,8 +563,8 @@ module Numo 
     | 
|
| 
       599 
563 
     | 
    
         
             
                # @example
         
     | 
| 
       600 
564 
     | 
    
         
             
                #   x = Numo::Int32[1,2,3]
         
     | 
| 
       601 
565 
     | 
    
         
             
                #   y = Numo::Int32[2,3,4]
         
     | 
| 
       602 
     | 
    
         
            -
                #    
     | 
| 
       603 
     | 
    
         
            -
                #   # Numo::Int32#shape=[3,2]
         
     | 
| 
      
 566 
     | 
    
         
            +
                #   Numo::NArray.column_stack([x,y])
         
     | 
| 
      
 567 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[3,2]
         
     | 
| 
       604 
568 
     | 
    
         
             
                #   # [[1, 2],
         
     | 
| 
       605 
569 
     | 
    
         
             
                #   #  [2, 3],
         
     | 
| 
       606 
570 
     | 
    
         
             
                #   #  [3, 4]]
         
     | 
| 
         @@ -640,23 +604,23 @@ module Numo 
     | 
|
| 
       640 
604 
     | 
    
         
             
                end # class << self
         
     | 
| 
       641 
605 
     | 
    
         | 
| 
       642 
606 
     | 
    
         
             
                # @example
         
     | 
| 
       643 
     | 
    
         
            -
                #    
     | 
| 
       644 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[2,2]
         
     | 
| 
      
 607 
     | 
    
         
            +
                #   a = Numo::DFloat[[1, 2], [3, 4]]
         
     | 
| 
      
 608 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[2,2]
         
     | 
| 
       645 
609 
     | 
    
         
             
                #   # [[1, 2],
         
     | 
| 
       646 
610 
     | 
    
         
             
                #   #  [3, 4]]
         
     | 
| 
       647 
611 
     | 
    
         
             
                #
         
     | 
| 
       648 
     | 
    
         
            -
                #    
     | 
| 
       649 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[1,2]
         
     | 
| 
      
 612 
     | 
    
         
            +
                #   b = Numo::DFloat[[5, 6]]
         
     | 
| 
      
 613 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[1,2]
         
     | 
| 
       650 
614 
     | 
    
         
             
                #   # [[5, 6]]
         
     | 
| 
       651 
615 
     | 
    
         
             
                #
         
     | 
| 
       652 
     | 
    
         
            -
                #    
     | 
| 
       653 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[3,2]
         
     | 
| 
      
 616 
     | 
    
         
            +
                #   a.concatenate(b,axis:0)
         
     | 
| 
      
 617 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[3,2]
         
     | 
| 
       654 
618 
     | 
    
         
             
                #   # [[1, 2],
         
     | 
| 
       655 
619 
     | 
    
         
             
                #   #  [3, 4],
         
     | 
| 
       656 
620 
     | 
    
         
             
                #   #  [5, 6]]
         
     | 
| 
       657 
621 
     | 
    
         
             
                #
         
     | 
| 
       658 
     | 
    
         
            -
                #    
     | 
| 
       659 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[2,3]
         
     | 
| 
      
 622 
     | 
    
         
            +
                #   a.concatenate(b.transpose, axis:1)
         
     | 
| 
      
 623 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[2,3]
         
     | 
| 
       660 
624 
     | 
    
         
             
                #   # [[1, 2, 5],
         
     | 
| 
       661 
625 
     | 
    
         
             
                #   #  [3, 4, 6]]
         
     | 
| 
       662 
626 
     | 
    
         | 
| 
         @@ -690,36 +654,40 @@ module Numo 
     | 
|
| 
       690 
654 
     | 
    
         
             
                  result = self.class.zeros(*self_shape)
         
     | 
| 
       691 
655 
     | 
    
         
             
                  lst = shape[axis]
         
     | 
| 
       692 
656 
     | 
    
         
             
                  refs = [true] * ndim
         
     | 
| 
       693 
     | 
    
         
            -
                   
     | 
| 
       694 
     | 
    
         
            -
             
     | 
| 
      
 657 
     | 
    
         
            +
                  if lst > 0
         
     | 
| 
      
 658 
     | 
    
         
            +
                    refs[axis] = 0...lst
         
     | 
| 
      
 659 
     | 
    
         
            +
                    result[*refs] = self
         
     | 
| 
      
 660 
     | 
    
         
            +
                  end
         
     | 
| 
       695 
661 
     | 
    
         
             
                  arrays.each do |a|
         
     | 
| 
       696 
662 
     | 
    
         
             
                    fst = lst
         
     | 
| 
       697 
663 
     | 
    
         
             
                    lst = fst + (a.shape[axis-ndim] || 1)
         
     | 
| 
       698 
     | 
    
         
            -
                     
     | 
| 
       699 
     | 
    
         
            -
             
     | 
| 
      
 664 
     | 
    
         
            +
                    if lst > fst
         
     | 
| 
      
 665 
     | 
    
         
            +
                      refs[axis] = fst...lst
         
     | 
| 
      
 666 
     | 
    
         
            +
                      result[*refs] = a
         
     | 
| 
      
 667 
     | 
    
         
            +
                    end
         
     | 
| 
       700 
668 
     | 
    
         
             
                  end
         
     | 
| 
       701 
669 
     | 
    
         
             
                  result
         
     | 
| 
       702 
670 
     | 
    
         
             
                end
         
     | 
| 
       703 
671 
     | 
    
         | 
| 
       704 
672 
     | 
    
         
             
                # @example
         
     | 
| 
       705 
     | 
    
         
            -
                #    
     | 
| 
       706 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[9]
         
     | 
| 
      
 673 
     | 
    
         
            +
                #   x = Numo::DFloat.new(9).seq
         
     | 
| 
      
 674 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[9]
         
     | 
| 
       707 
675 
     | 
    
         
             
                #   # [0, 1, 2, 3, 4, 5, 6, 7, 8]
         
     | 
| 
       708 
676 
     | 
    
         
             
                #
         
     | 
| 
       709 
     | 
    
         
            -
                #    
     | 
| 
       710 
     | 
    
         
            -
                #   # [Numo::DFloat(view)#shape=[3]
         
     | 
| 
      
 677 
     | 
    
         
            +
                #   x.split(3)
         
     | 
| 
      
 678 
     | 
    
         
            +
                #   # => [Numo::DFloat(view)#shape=[3]
         
     | 
| 
       711 
679 
     | 
    
         
             
                #   # [0, 1, 2],
         
     | 
| 
       712 
680 
     | 
    
         
             
                #   #  Numo::DFloat(view)#shape=[3]
         
     | 
| 
       713 
681 
     | 
    
         
             
                #   # [3, 4, 5],
         
     | 
| 
       714 
682 
     | 
    
         
             
                #   #  Numo::DFloat(view)#shape=[3]
         
     | 
| 
       715 
683 
     | 
    
         
             
                #   # [6, 7, 8]]
         
     | 
| 
       716 
684 
     | 
    
         
             
                #
         
     | 
| 
       717 
     | 
    
         
            -
                #    
     | 
| 
       718 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[8]
         
     | 
| 
      
 685 
     | 
    
         
            +
                #   x = Numo::DFloat.new(8).seq
         
     | 
| 
      
 686 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[8]
         
     | 
| 
       719 
687 
     | 
    
         
             
                #   # [0, 1, 2, 3, 4, 5, 6, 7]
         
     | 
| 
       720 
688 
     | 
    
         
             
                #
         
     | 
| 
       721 
     | 
    
         
            -
                #    
     | 
| 
       722 
     | 
    
         
            -
                #   # [Numo::DFloat(view)#shape=[3]
         
     | 
| 
      
 689 
     | 
    
         
            +
                #   x.split([3, 5, 6, 10])
         
     | 
| 
      
 690 
     | 
    
         
            +
                #   # => [Numo::DFloat(view)#shape=[3]
         
     | 
| 
       723 
691 
     | 
    
         
             
                #   # [0, 1, 2],
         
     | 
| 
       724 
692 
     | 
    
         
             
                #   #  Numo::DFloat(view)#shape=[2]
         
     | 
| 
       725 
693 
     | 
    
         
             
                #   # [3, 4],
         
     | 
| 
         @@ -766,15 +734,15 @@ module Numo 
     | 
|
| 
       766 
734 
     | 
    
         
             
                end
         
     | 
| 
       767 
735 
     | 
    
         | 
| 
       768 
736 
     | 
    
         
             
                # @example
         
     | 
| 
       769 
     | 
    
         
            -
                #    
     | 
| 
       770 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[4,4]
         
     | 
| 
      
 737 
     | 
    
         
            +
                #   x = Numo::DFloat.new(4,4).seq
         
     | 
| 
      
 738 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[4,4]
         
     | 
| 
       771 
739 
     | 
    
         
             
                #   # [[0, 1, 2, 3],
         
     | 
| 
       772 
740 
     | 
    
         
             
                #   #  [4, 5, 6, 7],
         
     | 
| 
       773 
741 
     | 
    
         
             
                #   #  [8, 9, 10, 11],
         
     | 
| 
       774 
742 
     | 
    
         
             
                #   #  [12, 13, 14, 15]]
         
     | 
| 
       775 
743 
     | 
    
         
             
                #
         
     | 
| 
       776 
     | 
    
         
            -
                #    
     | 
| 
       777 
     | 
    
         
            -
                #   # [Numo::DFloat(view)#shape=[4,2]
         
     | 
| 
      
 744 
     | 
    
         
            +
                #   x.hsplit(2)
         
     | 
| 
      
 745 
     | 
    
         
            +
                #   # => [Numo::DFloat(view)#shape=[4,2]
         
     | 
| 
       778 
746 
     | 
    
         
             
                #   # [[0, 1],
         
     | 
| 
       779 
747 
     | 
    
         
             
                #   #  [4, 5],
         
     | 
| 
       780 
748 
     | 
    
         
             
                #   #  [8, 9],
         
     | 
| 
         @@ -785,8 +753,8 @@ module Numo 
     | 
|
| 
       785 
753 
     | 
    
         
             
                #   #  [10, 11],
         
     | 
| 
       786 
754 
     | 
    
         
             
                #   #  [14, 15]]]
         
     | 
| 
       787 
755 
     | 
    
         
             
                #
         
     | 
| 
       788 
     | 
    
         
            -
                #    
     | 
| 
       789 
     | 
    
         
            -
                #   # [Numo::DFloat(view)#shape=[4,3]
         
     | 
| 
      
 756 
     | 
    
         
            +
                #   x.hsplit([3, 6])
         
     | 
| 
      
 757 
     | 
    
         
            +
                #   # => [Numo::DFloat(view)#shape=[4,3]
         
     | 
| 
       790 
758 
     | 
    
         
             
                #   # [[0, 1, 2],
         
     | 
| 
       791 
759 
     | 
    
         
             
                #   #  [4, 5, 6],
         
     | 
| 
       792 
760 
     | 
    
         
             
                #   #  [8, 9, 10],
         
     | 
| 
         @@ -811,47 +779,47 @@ module Numo 
     | 
|
| 
       811 
779 
     | 
    
         
             
                end
         
     | 
| 
       812 
780 
     | 
    
         | 
| 
       813 
781 
     | 
    
         
             
                # @example
         
     | 
| 
       814 
     | 
    
         
            -
                #    
     | 
| 
       815 
     | 
    
         
            -
                #   # Numo::Int32#shape=[3]
         
     | 
| 
      
 782 
     | 
    
         
            +
                #   a = Numo::NArray[0,1,2]
         
     | 
| 
      
 783 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[3]
         
     | 
| 
       816 
784 
     | 
    
         
             
                #   # [0, 1, 2]
         
     | 
| 
       817 
785 
     | 
    
         
             
                #
         
     | 
| 
       818 
     | 
    
         
            -
                #    
     | 
| 
       819 
     | 
    
         
            -
                #   # Numo::Int32#shape=[6]
         
     | 
| 
      
 786 
     | 
    
         
            +
                #   a.tile(2)
         
     | 
| 
      
 787 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[6]
         
     | 
| 
       820 
788 
     | 
    
         
             
                #   # [0, 1, 2, 0, 1, 2]
         
     | 
| 
       821 
789 
     | 
    
         
             
                #
         
     | 
| 
       822 
     | 
    
         
            -
                #    
     | 
| 
       823 
     | 
    
         
            -
                #   # Numo::Int32#shape=[2,6]
         
     | 
| 
      
 790 
     | 
    
         
            +
                #   a.tile(2,2)
         
     | 
| 
      
 791 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[2,6]
         
     | 
| 
       824 
792 
     | 
    
         
             
                #   # [[0, 1, 2, 0, 1, 2],
         
     | 
| 
       825 
793 
     | 
    
         
             
                #   #  [0, 1, 2, 0, 1, 2]]
         
     | 
| 
       826 
794 
     | 
    
         
             
                #
         
     | 
| 
       827 
     | 
    
         
            -
                #    
     | 
| 
       828 
     | 
    
         
            -
                #   # Numo::Int32#shape=[2,1,6]
         
     | 
| 
      
 795 
     | 
    
         
            +
                #   a.tile(2,1,2)
         
     | 
| 
      
 796 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[2,1,6]
         
     | 
| 
       829 
797 
     | 
    
         
             
                #   # [[[0, 1, 2, 0, 1, 2]],
         
     | 
| 
       830 
798 
     | 
    
         
             
                #   #  [[0, 1, 2, 0, 1, 2]]]
         
     | 
| 
       831 
799 
     | 
    
         
             
                #
         
     | 
| 
       832 
     | 
    
         
            -
                #    
     | 
| 
       833 
     | 
    
         
            -
                #   # Numo::Int32#shape=[2,2]
         
     | 
| 
      
 800 
     | 
    
         
            +
                #   b = Numo::NArray[[1, 2], [3, 4]]
         
     | 
| 
      
 801 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[2,2]
         
     | 
| 
       834 
802 
     | 
    
         
             
                #   # [[1, 2],
         
     | 
| 
       835 
803 
     | 
    
         
             
                #   #  [3, 4]]
         
     | 
| 
       836 
804 
     | 
    
         
             
                #
         
     | 
| 
       837 
     | 
    
         
            -
                #    
     | 
| 
       838 
     | 
    
         
            -
                #   # Numo::Int32#shape=[2,4]
         
     | 
| 
      
 805 
     | 
    
         
            +
                #   b.tile(2)
         
     | 
| 
      
 806 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[2,4]
         
     | 
| 
       839 
807 
     | 
    
         
             
                #   # [[1, 2, 1, 2],
         
     | 
| 
       840 
808 
     | 
    
         
             
                #   #  [3, 4, 3, 4]]
         
     | 
| 
       841 
809 
     | 
    
         
             
                #
         
     | 
| 
       842 
     | 
    
         
            -
                #    
     | 
| 
       843 
     | 
    
         
            -
                #   # Numo::Int32#shape=[4,2]
         
     | 
| 
      
 810 
     | 
    
         
            +
                #   b.tile(2,1)
         
     | 
| 
      
 811 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[4,2]
         
     | 
| 
       844 
812 
     | 
    
         
             
                #   # [[1, 2],
         
     | 
| 
       845 
813 
     | 
    
         
             
                #   #  [3, 4],
         
     | 
| 
       846 
814 
     | 
    
         
             
                #   #  [1, 2],
         
     | 
| 
       847 
815 
     | 
    
         
             
                #   #  [3, 4]]
         
     | 
| 
       848 
816 
     | 
    
         
             
                #
         
     | 
| 
       849 
     | 
    
         
            -
                #    
     | 
| 
       850 
     | 
    
         
            -
                #   # Numo::Int32#shape=[4]
         
     | 
| 
      
 817 
     | 
    
         
            +
                #   c = Numo::NArray[1,2,3,4]
         
     | 
| 
      
 818 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[4]
         
     | 
| 
       851 
819 
     | 
    
         
             
                #   # [1, 2, 3, 4]
         
     | 
| 
       852 
820 
     | 
    
         
             
                #
         
     | 
| 
       853 
     | 
    
         
            -
                #    
     | 
| 
       854 
     | 
    
         
            -
                #   # Numo::Int32#shape=[4,4]
         
     | 
| 
      
 821 
     | 
    
         
            +
                #   c.tile(4,1)
         
     | 
| 
      
 822 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[4,4]
         
     | 
| 
       855 
823 
     | 
    
         
             
                #   # [[1, 2, 3, 4],
         
     | 
| 
       856 
824 
     | 
    
         
             
                #   #  [1, 2, 3, 4],
         
     | 
| 
       857 
825 
     | 
    
         
             
                #   #  [1, 2, 3, 4],
         
     | 
| 
         @@ -894,26 +862,26 @@ module Numo 
     | 
|
| 
       894 
862 
     | 
    
         
             
                end
         
     | 
| 
       895 
863 
     | 
    
         | 
| 
       896 
864 
     | 
    
         
             
                # @example
         
     | 
| 
       897 
     | 
    
         
            -
                #    
     | 
| 
       898 
     | 
    
         
            -
                #   # Numo::Int32#shape=[4]
         
     | 
| 
      
 865 
     | 
    
         
            +
                #   Numo::NArray[3].repeat(4)
         
     | 
| 
      
 866 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[4]
         
     | 
| 
       899 
867 
     | 
    
         
             
                #   # [3, 3, 3, 3]
         
     | 
| 
       900 
868 
     | 
    
         
             
                #
         
     | 
| 
       901 
     | 
    
         
            -
                #    
     | 
| 
       902 
     | 
    
         
            -
                #   # Numo::Int32#shape=[2,2]
         
     | 
| 
      
 869 
     | 
    
         
            +
                #   x = Numo::NArray[[1,2],[3,4]]
         
     | 
| 
      
 870 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[2,2]
         
     | 
| 
       903 
871 
     | 
    
         
             
                #   # [[1, 2],
         
     | 
| 
       904 
872 
     | 
    
         
             
                #   #  [3, 4]]
         
     | 
| 
       905 
873 
     | 
    
         
             
                #
         
     | 
| 
       906 
     | 
    
         
            -
                #    
     | 
| 
       907 
     | 
    
         
            -
                #   # Numo::Int32#shape=[8]
         
     | 
| 
      
 874 
     | 
    
         
            +
                #   x.repeat(2)
         
     | 
| 
      
 875 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[8]
         
     | 
| 
       908 
876 
     | 
    
         
             
                #   # [1, 1, 2, 2, 3, 3, 4, 4]
         
     | 
| 
       909 
877 
     | 
    
         
             
                #
         
     | 
| 
       910 
     | 
    
         
            -
                #    
     | 
| 
       911 
     | 
    
         
            -
                #   # Numo::Int32#shape=[2,6]
         
     | 
| 
      
 878 
     | 
    
         
            +
                #   x.repeat(3,axis:1)
         
     | 
| 
      
 879 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[2,6]
         
     | 
| 
       912 
880 
     | 
    
         
             
                #   # [[1, 1, 1, 2, 2, 2],
         
     | 
| 
       913 
881 
     | 
    
         
             
                #   #  [3, 3, 3, 4, 4, 4]]
         
     | 
| 
       914 
882 
     | 
    
         
             
                #
         
     | 
| 
       915 
     | 
    
         
            -
                #    
     | 
| 
       916 
     | 
    
         
            -
                #   # Numo::Int32#shape=[3,2]
         
     | 
| 
      
 883 
     | 
    
         
            +
                #   x.repeat([1,2],axis:0)
         
     | 
| 
      
 884 
     | 
    
         
            +
                #   # => Numo::Int32#shape=[3,2]
         
     | 
| 
       917 
885 
     | 
    
         
             
                #   # [[1, 2],
         
     | 
| 
       918 
886 
     | 
    
         
             
                #   #  [3, 4],
         
     | 
| 
       919 
887 
     | 
    
         
             
                #   #  [3, 4]]
         
     | 
| 
         @@ -954,30 +922,30 @@ module Numo 
     | 
|
| 
       954 
922 
     | 
    
         | 
| 
       955 
923 
     | 
    
         
             
                # Calculate the n-th discrete difference along given axis.
         
     | 
| 
       956 
924 
     | 
    
         
             
                # @example
         
     | 
| 
       957 
     | 
    
         
            -
                #    
     | 
| 
       958 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[5]
         
     | 
| 
      
 925 
     | 
    
         
            +
                #   x = Numo::DFloat[1, 2, 4, 7, 0]
         
     | 
| 
      
 926 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[5]
         
     | 
| 
       959 
927 
     | 
    
         
             
                #   # [1, 2, 4, 7, 0]
         
     | 
| 
       960 
928 
     | 
    
         
             
                #
         
     | 
| 
       961 
     | 
    
         
            -
                #    
     | 
| 
       962 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[4]
         
     | 
| 
      
 929 
     | 
    
         
            +
                #   x.diff
         
     | 
| 
      
 930 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[4]
         
     | 
| 
       963 
931 
     | 
    
         
             
                #   # [1, 2, 3, -7]
         
     | 
| 
       964 
932 
     | 
    
         
             
                #
         
     | 
| 
       965 
     | 
    
         
            -
                #    
     | 
| 
       966 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[3]
         
     | 
| 
      
 933 
     | 
    
         
            +
                #   x.diff(2)
         
     | 
| 
      
 934 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[3]
         
     | 
| 
       967 
935 
     | 
    
         
             
                #   # [1, 1, -10]
         
     | 
| 
       968 
936 
     | 
    
         
             
                #
         
     | 
| 
       969 
     | 
    
         
            -
                #    
     | 
| 
       970 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[2,4]
         
     | 
| 
      
 937 
     | 
    
         
            +
                #   x = Numo::DFloat[[1, 3, 6, 10], [0, 5, 6, 8]]
         
     | 
| 
      
 938 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[2,4]
         
     | 
| 
       971 
939 
     | 
    
         
             
                #   # [[1, 3, 6, 10],
         
     | 
| 
       972 
940 
     | 
    
         
             
                #   #  [0, 5, 6, 8]]
         
     | 
| 
       973 
941 
     | 
    
         
             
                #
         
     | 
| 
       974 
     | 
    
         
            -
                #    
     | 
| 
       975 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[2,3]
         
     | 
| 
      
 942 
     | 
    
         
            +
                #   x.diff
         
     | 
| 
      
 943 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[2,3]
         
     | 
| 
       976 
944 
     | 
    
         
             
                #   # [[2, 3, 4],
         
     | 
| 
       977 
945 
     | 
    
         
             
                #   #  [5, 1, 2]]
         
     | 
| 
       978 
946 
     | 
    
         
             
                #
         
     | 
| 
       979 
     | 
    
         
            -
                #    
     | 
| 
       980 
     | 
    
         
            -
                #   # Numo::DFloat#shape=[1,4]
         
     | 
| 
      
 947 
     | 
    
         
            +
                #   x.diff(axis:0)
         
     | 
| 
      
 948 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[1,4]
         
     | 
| 
       981 
949 
     | 
    
         
             
                #   # [[-1, 2, 0, -2]]
         
     | 
| 
       982 
950 
     | 
    
         | 
| 
       983 
951 
     | 
    
         
             
                def diff(n=1,axis:-1)
         
     | 
| 
         @@ -1182,18 +1150,20 @@ module Numo 
     | 
|
| 
       1182 
1150 
     | 
    
         
             
                # @return [Numo::NArray]  return outer product
         
     | 
| 
       1183 
1151 
     | 
    
         
             
                # @example
         
     | 
| 
       1184 
1152 
     | 
    
         
             
                #   a = Numo::DFloat.ones(5)
         
     | 
| 
       1185 
     | 
    
         
            -
                #   => Numo::DFloat#shape=[5]
         
     | 
| 
       1186 
     | 
    
         
            -
                #   [1, 1, 1, 1, 1]
         
     | 
| 
      
 1153 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[5]
         
     | 
| 
      
 1154 
     | 
    
         
            +
                #   # [1, 1, 1, 1, 1]
         
     | 
| 
      
 1155 
     | 
    
         
            +
                #
         
     | 
| 
       1187 
1156 
     | 
    
         
             
                #   b = Numo::DFloat.linspace(-2,2,5)
         
     | 
| 
       1188 
     | 
    
         
            -
                #   => Numo::DFloat#shape=[5]
         
     | 
| 
       1189 
     | 
    
         
            -
                #   [-2, -1, 0, 1, 2]
         
     | 
| 
      
 1157 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[5]
         
     | 
| 
      
 1158 
     | 
    
         
            +
                #   # [-2, -1, 0, 1, 2]
         
     | 
| 
      
 1159 
     | 
    
         
            +
                #
         
     | 
| 
       1190 
1160 
     | 
    
         
             
                #   a.outer(b)
         
     | 
| 
       1191 
     | 
    
         
            -
                #   => Numo::DFloat#shape=[5,5]
         
     | 
| 
       1192 
     | 
    
         
            -
                #   [[-2, -1, 0, 1, 2],
         
     | 
| 
       1193 
     | 
    
         
            -
                # 
     | 
| 
       1194 
     | 
    
         
            -
                # 
     | 
| 
       1195 
     | 
    
         
            -
                # 
     | 
| 
       1196 
     | 
    
         
            -
                # 
     | 
| 
      
 1161 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[5,5]
         
     | 
| 
      
 1162 
     | 
    
         
            +
                #   # [[-2, -1, 0, 1, 2],
         
     | 
| 
      
 1163 
     | 
    
         
            +
                #   #  [-2, -1, 0, 1, 2],
         
     | 
| 
      
 1164 
     | 
    
         
            +
                #   #  [-2, -1, 0, 1, 2],
         
     | 
| 
      
 1165 
     | 
    
         
            +
                #   #  [-2, -1, 0, 1, 2],
         
     | 
| 
      
 1166 
     | 
    
         
            +
                #   #  [-2, -1, 0, 1, 2]]
         
     | 
| 
       1197 
1167 
     | 
    
         | 
| 
       1198 
1168 
     | 
    
         
             
                def outer(b, axis:nil)
         
     | 
| 
       1199 
1169 
     | 
    
         
             
                  b = NArray.cast(b)
         
     | 
| 
         @@ -1213,6 +1183,35 @@ module Numo 
     | 
|
| 
       1213 
1183 
     | 
    
         
             
                  end
         
     | 
| 
       1214 
1184 
     | 
    
         
             
                end
         
     | 
| 
       1215 
1185 
     | 
    
         | 
| 
      
 1186 
     | 
    
         
            +
                # Percentile
         
     | 
| 
      
 1187 
     | 
    
         
            +
                #
         
     | 
| 
      
 1188 
     | 
    
         
            +
                # @param q [Numo::NArray]
         
     | 
| 
      
 1189 
     | 
    
         
            +
                # @param axis [Integer] applied axis
         
     | 
| 
      
 1190 
     | 
    
         
            +
                # @return [Numo::NArray]  return percentile
         
     | 
| 
      
 1191 
     | 
    
         
            +
                def percentile(q, axis: nil)
         
     | 
| 
      
 1192 
     | 
    
         
            +
                  raise ArgumentError, "q is out of range" if q < 0 || q > 100
         
     | 
| 
      
 1193 
     | 
    
         
            +
             
     | 
| 
      
 1194 
     | 
    
         
            +
                  x = self
         
     | 
| 
      
 1195 
     | 
    
         
            +
                  unless axis
         
     | 
| 
      
 1196 
     | 
    
         
            +
                    axis = 0
         
     | 
| 
      
 1197 
     | 
    
         
            +
                    x = x.flatten
         
     | 
| 
      
 1198 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1199 
     | 
    
         
            +
             
     | 
| 
      
 1200 
     | 
    
         
            +
                  sorted = x.sort(axis: axis)
         
     | 
| 
      
 1201 
     | 
    
         
            +
                  x = q / 100.0 * (sorted.shape[axis] - 1)
         
     | 
| 
      
 1202 
     | 
    
         
            +
                  r = x % 1
         
     | 
| 
      
 1203 
     | 
    
         
            +
                  i = x.floor
         
     | 
| 
      
 1204 
     | 
    
         
            +
                  refs = [true] * sorted.ndim
         
     | 
| 
      
 1205 
     | 
    
         
            +
                  refs[axis] = i
         
     | 
| 
      
 1206 
     | 
    
         
            +
                  if i == sorted.shape[axis] - 1
         
     | 
| 
      
 1207 
     | 
    
         
            +
                    sorted[*refs]
         
     | 
| 
      
 1208 
     | 
    
         
            +
                  else
         
     | 
| 
      
 1209 
     | 
    
         
            +
                    refs_upper = refs.dup
         
     | 
| 
      
 1210 
     | 
    
         
            +
                    refs_upper[axis] = i + 1
         
     | 
| 
      
 1211 
     | 
    
         
            +
                    sorted[*refs] + r * (sorted[*refs_upper] - sorted[*refs])
         
     | 
| 
      
 1212 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1213 
     | 
    
         
            +
                end
         
     | 
| 
      
 1214 
     | 
    
         
            +
             
     | 
| 
       1216 
1215 
     | 
    
         
             
                # Kronecker product of two arrays.
         
     | 
| 
       1217 
1216 
     | 
    
         
             
                #
         
     | 
| 
       1218 
1217 
     | 
    
         
             
                #     kron(a,b)[k_0, k_1, ...] = a[i_0, i_1, ...] * b[j_0, j_1, ...]
         
     | 
| 
         @@ -1222,17 +1221,19 @@ module Numo 
     | 
|
| 
       1222 
1221 
     | 
    
         
             
                # @return [Numo::NArray]  return Kronecker product
         
     | 
| 
       1223 
1222 
     | 
    
         
             
                # @example
         
     | 
| 
       1224 
1223 
     | 
    
         
             
                #   Numo::DFloat[1,10,100].kron([5,6,7])
         
     | 
| 
       1225 
     | 
    
         
            -
                #   => Numo::DFloat#shape=[9]
         
     | 
| 
       1226 
     | 
    
         
            -
                #   [5, 6, 7, 50, 60, 70, 500, 600, 700]
         
     | 
| 
      
 1224 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[9]
         
     | 
| 
      
 1225 
     | 
    
         
            +
                #   # [5, 6, 7, 50, 60, 70, 500, 600, 700]
         
     | 
| 
      
 1226 
     | 
    
         
            +
                #
         
     | 
| 
       1227 
1227 
     | 
    
         
             
                #   Numo::DFloat[5,6,7].kron([1,10,100])
         
     | 
| 
       1228 
     | 
    
         
            -
                #   => Numo::DFloat#shape=[9]
         
     | 
| 
       1229 
     | 
    
         
            -
                #   [5, 50, 500, 6, 60, 600, 7, 70, 700]
         
     | 
| 
      
 1228 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[9]
         
     | 
| 
      
 1229 
     | 
    
         
            +
                #   # [5, 50, 500, 6, 60, 600, 7, 70, 700]
         
     | 
| 
      
 1230 
     | 
    
         
            +
                #
         
     | 
| 
       1230 
1231 
     | 
    
         
             
                #   Numo::DFloat.eye(2).kron(Numo::DFloat.ones(2,2))
         
     | 
| 
       1231 
     | 
    
         
            -
                #   => Numo::DFloat#shape=[4,4]
         
     | 
| 
       1232 
     | 
    
         
            -
                #   [[1, 1, 0, 0],
         
     | 
| 
       1233 
     | 
    
         
            -
                # 
     | 
| 
       1234 
     | 
    
         
            -
                # 
     | 
| 
       1235 
     | 
    
         
            -
                # 
     | 
| 
      
 1232 
     | 
    
         
            +
                #   # => Numo::DFloat#shape=[4,4]
         
     | 
| 
      
 1233 
     | 
    
         
            +
                #   # [[1, 1, 0, 0],
         
     | 
| 
      
 1234 
     | 
    
         
            +
                #   #  [1, 1, 0, 0],
         
     | 
| 
      
 1235 
     | 
    
         
            +
                #   #  [0, 0, 1, 1],
         
     | 
| 
      
 1236 
     | 
    
         
            +
                #   #  [0, 0, 1, 1]]
         
     | 
| 
       1236 
1237 
     | 
    
         | 
| 
       1237 
1238 
     | 
    
         
             
                def kron(b)
         
     | 
| 
       1238 
1239 
     | 
    
         
             
                  b = NArray.cast(b)
         
     |