2010-04-26 116 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