Module: Meshgrid

Defined in:
lib/meshgrid.rb,
lib/meshgrid/version.rb

Defined Under Namespace

Classes: Error

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.meshgrid(*narray, indexing: false) ⇒ Object

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



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 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) ⇒ Object



46
# File 'lib/meshgrid.rb', line 46

def srange(narray, n); return 0...narray[n].size; end