2010-04-26 102 views
0

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

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

当载体是:[1,0]

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

当载体是:[-1,0]

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

当载体是:[-2, 0]

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

当载体是:[1,1]

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

当载体是:[0,1]

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

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

注:我咨询了红宝石“黑客帝国”和“矢量”类,但我看不出有什么办法用我的方式来使用它...

编辑:其实,每个值是多少单元格(从当前单元格到最后一个单元格)根据给定的矢量。

如果我们取其中载体是示例[-2,0],用值* 1 *(在阵列[2,3]):

​​

...我们可以认为这样如:

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

+0

我不知道Ruby,但这看起来不像任何语言的标准库中会发现的那种东西。我想你可能需要编写自己的算法。 – 2010-04-26 14:01:46

+0

你能解释一下生成数组的规则吗?这些是唯一可能的矢量值吗? – 2010-04-26 14:02:14

回答

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.buildlatest Matrix library

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

+0

哇!似乎很惊人。我要更新到1.9并尝试你的代码。非常感谢!! – 2010-04-26 16:18:59

+0

您也可以复制该库并将其包含在其中,而不是内置的库。只要有机会,我会立即将lib移植到1.8版本。 – 2010-04-26 16:34:18

0

OK我有点困惑,但我要采取瞎猜

你想要的是通过阵列中的每个点运行,调用将在该计算值的函数位置

因此我们有 循环i 循环j array [i,j] = Vectorfunction(i,j,vector); 下面j个 下一I

功能(I,J,矢量) 这里我猜测你以某种方式使用在阵列中的位置,和由矢量定义的直线的斜率。这是我无法从数据中提取的,但我确定存在这样的功能。
最可能的情况是arccos需要获取角度。然后回到我* ARCSIN + J + ARCCOS