Ruby 从向量填充数组

Ruby 从向量填充数组,ruby,math,arrays,vector,multidimensional-array,Ruby,Math,Arrays,Vector,Multidimensional Array,我想从一个向量填充一个二维数组 我认为解释我自己的最好方法是举一些例子(用[3,5]长的数组) 当向量为:[1,0] [ [4, 3, 2, 1, 0], [4, 3, 2, 1, 0], [4, 3, 2, 1, 0] ] [ [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4] ] [ [0, 0, 1, 1, 2], [0, 0, 1, 1, 2], [0, 0, 1, 1, 2] ] [ [2,

我想从一个向量填充一个二维数组

我认为解释我自己的最好方法是举一些例子(用[3,5]长的数组)

当向量为:[1,0]

[
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0]
]
[
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4]
]
[
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2]
]
[
  [2, 2, 2, 1, 0],
  [1, 1, 1, 1, 0],
  [0, 0, 0, 0, 0]
]
[
  [2, 2, 2, 2, 2],
  [1, 1, 1, 1, 1],
  [0, 0, 0, 0, 0]
]
当向量为:[-1,0]

[
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0]
]
[
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4]
]
[
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2]
]
[
  [2, 2, 2, 1, 0],
  [1, 1, 1, 1, 0],
  [0, 0, 0, 0, 0]
]
[
  [2, 2, 2, 2, 2],
  [1, 1, 1, 1, 1],
  [0, 0, 0, 0, 0]
]
当向量为:[-2,0]

[
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0]
]
[
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4]
]
[
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2]
]
[
  [2, 2, 2, 1, 0],
  [1, 1, 1, 1, 0],
  [0, 0, 0, 0, 0]
]
[
  [2, 2, 2, 2, 2],
  [1, 1, 1, 1, 1],
  [0, 0, 0, 0, 0]
]
当向量为:[1,1]

[
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0]
]
[
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4]
]
[
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2]
]
[
  [2, 2, 2, 1, 0],
  [1, 1, 1, 1, 0],
  [0, 0, 0, 0, 0]
]
[
  [2, 2, 2, 2, 2],
  [1, 1, 1, 1, 1],
  [0, 0, 0, 0, 0]
]
当向量为:[0,1]

[
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0]
]
[
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4]
]
[
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2]
]
[
  [2, 2, 2, 1, 0],
  [1, 1, 1, 1, 0],
  [0, 0, 0, 0, 0]
]
[
  [2, 2, 2, 2, 2],
  [1, 1, 1, 1, 1],
  [0, 0, 0, 0, 0]
]
你有什么想法、好的图书馆或计划吗? 欢迎提出任何意见。谢谢

注意:我参考了Ruby的“矩阵”和“向量”类,但我看不到任何方法可以用我的方式使用它

编辑:事实上,每个值是根据给定向量的单元格数(从当前单元格到最后一个单元格)

如果我们举一个向量为[-2,0]的例子,其值为*1*(在数组[2,3]):

数组=[
[, , ],
[, , ],
[, , *1*, ]
]
。。。我们可以这样想:

向量[-2,0]表示-2是 对于列,0表示行。所以如果我们 在阵列[2,3]中,我们可以移动1次 在左边(因为2是 负)长度为2(因为 -2.abs==2)。我们不会在顶部或底部移动,因为0表示 排


好吧,我有点困惑,但我要在黑暗中拍摄

您需要的是遍历数组中的每个点,并调用一个函数来计算该位置的值

所以我们有 回路一 回路j 数组[i,j]=向量函数(i,j,向量); 下一个j 接下来我

函数(i,j,向量) 在这里,我猜你不知何故使用了数组中的位置,以及向量定义的直线的斜率。我无法从数据中提取,但我确信存在这样一个函数。

这很可能涉及到arccos获得角度。然后返回i*arcin+j+arccos

很容易实现这一点:

require 'matrix'

def build(rows, cols, vector)
  Matrix.build(rows, cols){|i, j| vector.inner_product([cols-j-1, rows-i-1]) }
end

build(3, 5, Vector[1, 0]) # => your first example
# ...
build(3, 5, Vector[0, 1]) # => your last example
您将需要引入
矩阵的.build


注意:我觉得你的例子有点奇怪,第三个更奇怪。看起来我们必须除以你给出的向量,除非它是0?不管怎样,只要根据你需要的公式调整块

我不知道Ruby,但这似乎不是任何语言的标准库中都能找到的东西。我想你可能需要编写自己的算法。你能解释一下生成数组的规则吗?这些是唯一可能的向量值吗?哇!看起来很神奇。我要升级到1.9并尝试你的代码。非常感谢!!您也可以只复制库并包含它,而不是内置库。一旦有机会,我将把lib向后移植到1.8行。