2013-12-17 55 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

没问题,很乐意提供帮助。 –