2013-12-17 89 views
0

我已經失去了我的所有頭髮。我有一個3維數組。n維陣列上的數組數學

初始化爲Array.new(行){Array.new(列){Array.new(通道,0)}}

一切似乎工作,但是當我嘗試添加填充列,我無法弄清楚第二維如何受到打擊。

我已經完成了這5種不同的方法,並繼續爲第二個維度提出錯誤的大小。第一部分工作正常,我將一個數組stack_edge初始化爲一個1xn像素的數組,並將其推/放到image_data的開頭和結尾。然後變成陣列0 ...墊...原始高度... original_height_2 *墊)行。

但是,然後我嘗試並推動& unsquift pixexls到每行的列上並得到一個數組,認爲它比它寬。它報告的寬度比原來寬110個像素。我無法弄清楚其他100個像素來自哪裏。他們不在那裏,從來沒有注意過,因爲我計算而不是審問。 (old_width + 2 * pad_s)工作並且所有數據看起來都已到位,但寬度= @image_data [row] .size,以110像素大小重新排列。我猜這是因爲我推動的像素是一個10x1陣列,並且我把5放在前面,5放在後面,所以110通過一些奇怪的數學。你能告訴我我做錯了什麼嗎?

(0...pad_s).each { 
    @image_data.unshift(stack_edge) 
    @image_data.push(stack_edge) 
    } 
    [email protected]_data.size 
    edge=Array.new(image_data[0][0].size) 

    a='whats up' 
    ([email protected]_data.size).each { |i| 
     (0...pad_s).each{ 
     @image_data[i].unshift(edge) 
     @image_data[i].push([edge) 
     } 
    } 
+1

請讓您的問題更簡潔。 – sawa

回答

0

您正在推動/ unshifting 相同stack_edge陣列上的前5次的上@image_data背面5次。因此,當您跑過@image_data並在@image_data的每個陣列上推/不移10個「邊」時,這些10個邊被添加到stack_edge10次。因爲出現在@image_data的10個不同位置。得到它?

你需要的是:

@image_data.unshift(stack_edge.dup) 
@image_data.push(stack_edge.dup) 

這就是所謂的 「混淆的錯誤」。他們往往是面嚮對象語言的一個問題。

+0

那些別名的錯誤驅使我堅果。好了,我懂了。我有最難的時間得到一個數組的副本,而不是一個指針:) – bobbdelsol

+0

沒問題,很樂意提供幫助。 –