From c9c896dea2ba43551c4e10bd49666105449e9bd7 Mon Sep 17 00:00:00 2001 From: Aaron LI Date: Thu, 31 Mar 2016 10:57:34 +0800 Subject: add all scripts/tools --- julia/ndgrid.jl | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 julia/ndgrid.jl (limited to 'julia/ndgrid.jl') diff --git a/julia/ndgrid.jl b/julia/ndgrid.jl new file mode 100644 index 0000000..688a246 --- /dev/null +++ b/julia/ndgrid.jl @@ -0,0 +1,52 @@ +# This file is a part of Julia. License is MIT: http://julialang.org/license + +ndgrid(v::AbstractVector) = copy(v) + +function ndgrid{T}(v1::AbstractVector{T}, v2::AbstractVector{T}) + m, n = length(v1), length(v2) + v1 = reshape(v1, m, 1) + v2 = reshape(v2, 1, n) + (repmat(v1, 1, n), repmat(v2, m, 1)) +end + +function ndgrid_fill(a, v, s, snext) + for j = 1:length(a) + a[j] = v[div(rem(j-1, snext), s)+1] + end +end + +function ndgrid{T}(vs::AbstractVector{T}...) + n = length(vs) + sz = map(length, vs) + out = ntuple(i->Array(T, sz), n) + s = 1 + for i=1:n + a = out[i]::Array + v = vs[i] + snext = s*size(a,i) + ndgrid_fill(a, v, s, snext) + s = snext + end + out +end + +meshgrid(v::AbstractVector) = meshgrid(v, v) + +function meshgrid{T}(vx::AbstractVector{T}, vy::AbstractVector{T}) + m, n = length(vy), length(vx) + vx = reshape(vx, 1, n) + vy = reshape(vy, m, 1) + (repmat(vx, m, 1), repmat(vy, 1, n)) +end + +function meshgrid{T}(vx::AbstractVector{T}, vy::AbstractVector{T}, + vz::AbstractVector{T}) + m, n, o = length(vy), length(vx), length(vz) + vx = reshape(vx, 1, n, 1) + vy = reshape(vy, m, 1, 1) + vz = reshape(vz, 1, 1, o) + om = ones(Int, m) + on = ones(Int, n) + oo = ones(Int, o) + (vx[om, :, oo], vy[:, on, oo], vz[om, on, :]) +end -- cgit v1.2.2