53 lines
1.3 KiB
Julia
53 lines
1.3 KiB
Julia
# This file is a part of Julia. License is MIT: https://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
|