module Meshgrid

Constants

VERSION

Public Instance Methods

meshgrid(*narray, indexing: false) click to toggle source

Arg narray is just Array: But it should contain NArrays.

# File lib/meshgrid.rb, line 11
def meshgrid(*narray, indexing: false)
  len = narray.length

  org_ary = narray.map {|nar| nar.to_a }
  made_ary = Array.new(len)

  if len == 2 then
    made_ary[0] = srange(narray, 1).map { org_ary[0] }
    made_ary[1] = srange(narray, 0).map { org_ary[1] }
    
    if indexing
      made_ary[0] = made_ary[0].transpose  
    else
      made_ary[1] = made_ary[1].transpose  
    end

  elsif narray.length == 3 then
    made_ary[0] = srange(narray, 2).map { |z|
      srange(narray, 0).map { |y| srange(narray, 1).map { |x| org_ary[0][y] } }
    }
    made_ary[1] = srange(narray, 2).map { |z|
      srange(narray, 0).map { |y| srange(narray, 1).map { |x| org_ary[1][x] } }
    }
    made_ary[2] = srange(narray, 2).map { |z|
      srange(narray, 0).map { |y| srange(narray, 1).map { |x| org_ary[2][z] } }
    }

    # indexing is not supported for 3D grid yet.
  end
  
  return made_ary.map do |ary|
    narray[0].is_a?(Numo::Int32) ? Numo::Int32[*ary] : Numo::DFloat[*ary]
  end
end
srange(narray, n) click to toggle source
# File lib/meshgrid.rb, line 46
def srange(narray, n); return 0...narray[n].size; end