Grid Julia 1.1创建栅格(栅格中的点阵列)

Grid Julia 1.1创建栅格(栅格中的点阵列),grid,julia,Grid,Julia,使用Julia 1.1,我想基于范围向量创建点网格 当使用这个代码时,它会给我一个这样的点的列表 u = [[i j ] for i in -1:0.5:1, j in -1:0.5:1] [u...] 然而,我无法开发一种更通用的方法,在给定一系列范围时,创建这样一个多维点向量 例如,开发一个createGrid函数,该函数将n个范围的向量作为参数,并输出所有点的列表 createGrid([1.:0.5:0., 1.:0.5:0., 1.:0.5:0.]) 这将产生: 27-elemen

使用Julia 1.1,我想基于范围向量创建点网格

当使用这个代码时,它会给我一个这样的点的列表

u = [[i j ] for i in -1:0.5:1, j in -1:0.5:1]
[u...]
然而,我无法开发一种更通用的方法,在给定一系列范围时,创建这样一个多维点向量

例如,开发一个createGrid函数,该函数将n个范围的向量作为参数,并输出所有点的列表

createGrid([1.:0.5:0., 1.:0.5:0., 1.:0.5:0.])
这将产生:

27-element Array{Array{Float64,2},1}:
 [-1.0 -1.0 -1.0]
 [-0.5 -1.0 -1.0]
 [0.0 -1.0 -1.0] 
 [-1.0 -0.5 -1.0]
 [-0.5 -0.5 -1.0]
 [0.0 -0.5 -1.0] 
 [-1.0 0.0 -1.0] 
 [-0.5 0.0 -1.0] 
 [0.0 0.0 -1.0]  
 [-1.0 -1.0 -0.5]
 [-0.5 -1.0 -0.5]
 [0.0 -1.0 -0.5] 
 [-1.0 -0.5 -0.5]
 ⋮               

感谢您的建议

请查看
迭代器。产品
。它不创建
数组
s,而是创建一个对象,您可以迭代以将网格中的每个新元素作为
元组
(这通常是您想要的)


为了补充上面的优秀答案,如果您确实需要向量向量,您可以
将每个元组收集成向量,然后调用
vec
将向量数组展平为向量向量

julia> p = Iterators.product(-1.0:0.5:0.0, -1.0:0.5:0.0, -1.0:0.5:0.0);

julia> collect.(p)
3×3×3 Array{Array{Float64,1},3}:
[:, :, 1] =
 [-1.0, -1.0, -1.0]  [-1.0, -0.5, -1.0]  [-1.0, 0.0, -1.0]
 [-0.5, -1.0, -1.0]  [-0.5, -0.5, -1.0]  [-0.5, 0.0, -1.0]
 [0.0, -1.0, -1.0]   [0.0, -0.5, -1.0]   [0.0, 0.0, -1.0]

[:, :, 2] =
 [-1.0, -1.0, -0.5]  [-1.0, -0.5, -0.5]  [-1.0, 0.0, -0.5]
 [-0.5, -1.0, -0.5]  [-0.5, -0.5, -0.5]  [-0.5, 0.0, -0.5]
 [0.0, -1.0, -0.5]   [0.0, -0.5, -0.5]   [0.0, 0.0, -0.5]

[:, :, 3] =
 [-1.0, -1.0, 0.0]  [-1.0, -0.5, 0.0]  [-1.0, 0.0, 0.0]
 [-0.5, -1.0, 0.0]  [-0.5, -0.5, 0.0]  [-0.5, 0.0, 0.0]
 [0.0, -1.0, 0.0]   [0.0, -0.5, 0.0]   [0.0, 0.0, 0.0]

julia> vec(collect.(p))
27-element Array{Array{Float64,1},1}:
 [-1.0, -1.0, -1.0]
 [-0.5, -1.0, -1.0]
 [0.0, -1.0, -1.0]
 [-1.0, -0.5, -1.0]
 [-0.5, -0.5, -1.0]
 [0.0, -0.5, -1.0]
 [-1.0, 0.0, -1.0]
 ⋮
我将使用:

using GeometryTypes
grid(ranges::NTuple{N, <: AbstractRange}) where N = Point.(Iterators.product(ranges...))
p = grid((-1.:0.5:0.0, -1.:0.5:0.0))
使用几何类型

grid(ranges::NTuple{N,您需要具体化网格有什么特别的原因吗?您不能让网格保持由范围集合隐式定义的状态吗?
using GeometryTypes
grid(ranges::NTuple{N, <: AbstractRange}) where N = Point.(Iterators.product(ranges...))
p = grid((-1.:0.5:0.0, -1.:0.5:0.0))