n维数组上的数组数学

时间:2013-12-17 06:24:44

标签: ruby arrays

我已经失去了所有头发。我有一个三维数组。

初始化为Array.new(rows){Array.new(columns){Array.new(CHANNELS,0)}}

一切似乎都有效,但是当我尝试添加填充列时,我无法弄清楚第二维如何被破坏。

我已经用5种不同的方式做到了这一点,并且继续为第二维提出错误的尺寸。第一部分工作正常,我将一个数组stack_edge初始化为一个1xn像素的数组,然后将其推/解到image_data的开头和结尾。然后变成和阵列0 ...填充...原始高度... original_height_2 * pad)行。

然后我尝试推动&将每个行的列异步移动到每行的列上,得到一个认为它比它宽的数组。它报告的宽度比原始宽度宽110像素。我无法弄清楚其他100个像素来自哪里。他们不在那里,从来没有注意过,因为我计算它而不是审问它。 (old_width + 2 * pad_s)工作,所有数据都显示在原位,但width = @image_data [row] .size,以110像素大小重新打开。我猜它是因为我正在推动的像素是一个10x1阵列,我在前面放5个,在后面放5个,所以110是一些奇怪的数学。你能告诉我我做错了什么吗?

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

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

1 个答案:

答案 0 :(得分:0)

您正在推动/取消相同的 stack_edge阵列5次,而@image_data背面5次。因此,当您在@image_data中运行@image_data并将10个“边缘”推/卸到stack_edge中的每个数组上时,这10个边将被添加到stack_edge 10次。因为同一@image_data出现在@image_data.unshift(stack_edge.dup) @image_data.push(stack_edge.dup) 的10个不同位置。得到它?

您需要的是:

{{1}}

这就是所谓的“别名错误”。它们往往是OO语言的一个问题。