以适当的方式遍历多维空间

问题描述 投票:0回答:1

假设我有一个向量,该向量具有四个维度,其中每个变量都位于一个特殊的区间内。这样我们得到:

Vector k = (x1,x2,x3,x4) with x1 = (-2,2), x2 = (0,2), x3 = (-4,1), x4 = (-1,1)

我只对区间的点约束感兴趣。

So to say v1 = (0,1,2,0) is important where v2 = (-5,-5,5,5) is not.

此外,在我的旅程中,点i + 1应该相对接近点i。因此,我不想在太空中跳来跳去。

是否有适当的方法来浏览这些有趣的地方?

例如,在x1,x2 =(-2,2)的2D空间中,如下所示:

enter image description here

注意:红线的频率可能更高

multidimensional-array vector
1个回答
0
投票

有很多方法可以在保持紧密度的同时创建空间填充曲线。有关一些示例,请参阅Wikipedia文章(一些示例具有关联的算法来生成它们):https://en.wikipedia.org/wiki/Space-filling_curve

[不管,让我们使用2D的锯齿形图案,并将其扩展到3D和4D。要将其扩展为3D,我们只需在锯齿形中添加另一个锯齿即可。看一下下面的(粗略)图:

Layered zig-zag

本质上,我们重复我们在2D模式中使用的模式,但是现在我们有代表第三维的多层。我们需要添加的额外Zig是在每一层的底部到顶部和顶部到底部之间的切换。抽象起来很简单:

在二维中,我们有x和y轴。

  1. 我们在x域中移动,在正负之间切换最常用的指示。
  2. 我们一次遍历y域。

在3D中,我们有x,y和z轴。

  1. 我们最常在正向和负向之间切换x域。
  2. 我们在y域中移动的频率是第二,在正负方向之间切换的频率最高。]
  3. 我们一次跨过z域。
  4. 应该清楚如何将其推广到更高的维度。现在,我将介绍一些(Python 3)代码,该代码实现4D的之字形模式。让我们将4D空间中的位置表示为(x, y, z, w),将每个维度中的范围表示为(x0, x1)(y0, y1)(z0, z1)(w0, w1)。这些是我们的投入。然后,我们还定义xdirydirzdir以跟踪锯齿形的方向。

x, y, z, w = x0, y0, z0, w0
xdir, ydir, zdir = +1, +1, +1

for iw in range(w1 - w0):
  for iz in range(z1 - z0):
    for iy in range(y1 - y0):
      for ix in range(x1 - x0):
        print(x, y, z, w)
        x = x + xdir
      xdir = -xdir
      print(x, y, z, w)
      y = y + ydir
    ydir = -ydir
    print(x, y, z, w)
    z = z + zdir
  zdir = -zdir
  print(x, y, z, w)
  w = w + 1

此算法保证彼此打印出的两个点之间的距离均不大于1。

使用递归,您可以将其清理为一个非常好的通用方法。我希望这有帮助;如果您有任何问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.