从矢量填充数组

时间:2010-04-26 13:58:02

标签: ruby math arrays vector multidimensional-array

我想从矢量填充二维数组。

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

当vector为: [1,0]

[
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0]
]

当vector为: [ - 1,0]

[
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4]
]

当vector为: [ - 2,0]

[
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2]
]

当vector为: [1,1]

[
  [2, 2, 2, 1, 0],
  [1, 1, 1, 1, 0],
  [0, 0, 0, 0, 0]
]

当vector为: [0,1]

[
  [2, 2, 2, 2, 2],
  [1, 1, 1, 1, 1],
  [0, 0, 0, 0, 0]
]

你有什么想法,一个好的图书馆或计划吗? 欢迎任何评论。感谢。

注意:我咨询了Ruby“Matrix”和“Vector”类,但我没有看到以任何方式使用它......

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

如果我们采用向量为[-2,0]的示例,其值为* 1 *(在数组[2,3]处):

array = [
  [<0>, <0>, <1>, <1>, <2>],
  [<0>, <0>, <1>, <1>, <2>],
  [<0>, <0>, <1>, *1*, <2>]
]

......我们可以这样思考:

  

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

2 个答案:

答案 0 :(得分:0)

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

你想要的是遍历数组中的每一个点并调用一个能够计算该位置值的函数

所以我们有 循环我 循环j  阵列[I,J] = Vectorfunction(I,J,向量); 下一个j 接下来我

功能(I,J,矢量) 在这里,我猜你以某种方式使用数组中的位置,以及由向量定义的线的斜率。那是我无法从数据中提取的,但我确信存在这样的功能 很可能这涉及到arccos以获得角度。然后返回i * arcsin + j + arccos

答案 1 :(得分:0)

实现这一目标很容易:

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

您需要引入Matrix.build的{​​{3}}。

注意:我发现你的例子有点奇怪,第三个甚至更奇怪。看起来我们必须除以你给出的矢量,除非它是0?无论如何,只需根据您需要的公式调整块。