Grid Julia 1.1创建栅格(栅格中的点阵列)
使用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
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))