Numpy数组,索引和卷积混乱

时间:2015-07-11 05:08:05

标签: python arrays numpy

我正在尝试完成以下功能,但我遇到了索引问题,导致“ValueError:操作数无法与形状(0,9)(5)一起广播”。

我认为我的错误可能来自于我是如何调用ssd_difference []中的值的,但我并不完全确定。

另外,我将如何根据下面给出的提示使用convolve2d?我知道numpy有它的功能,但我不知道我需要投入什么来使它工作。

附加信息:binomialFilter5()返回表示二项式过滤器的5x1 numpy数组dtype float。我还假设“weights []”是ssd_difference []值。

month  amt   CalcAmt
JAN   10000  0
FEB   20000  2
MAR   30000  1.5
APR   40000  1.33

“”“计算帧之间的转换成本,将动态变为         帐户。

说明:         1.通过ssd差异的行和列迭代,忽略了            前两个值和后两个值。
            1A。对于i,j处的每个值,乘以长度的二项式滤波器                 五个(在代码后面实现)由权重开始两个                 帧之前直到两帧之后,并取这些帧的总和                 产品

def transitionDifference(ssd_difference):

乘以每个i,j的二项式滤波器权重得到                 你的输出。

要了解我们的原因,可能需要一点点了解                 计算这个,简单的解释是改变                 第4帧到第5帧,让我们调用这个ch(4,5),然后我们做这个权重:

ch(4,5)= ch(2,3)+ ch(3,4)+ ch(4,5)+ ch(5,6)+ ch(6,7)

这说明了之前更改和未来的权重                 考虑当前帧时的变化。

当然,我们用二项式滤波器来衡量所有这些和,所以                 重量ch(4,5)仍然是最重要的一个,但是                 希望能让你更好地理解。

            i.e. Your weights for frame i are:
                 [weight[i - 2, j - 2],
                  weight[i - 1, j - 1],
                  weight[i, j],
                  weight[i + 1, j + 1],
                  weight[i + 2, j + 2]]

1 个答案:

答案 0 :(得分:1)

正如我评论的那样,你真的应该告诉我们产生错误信息的那一行。

但我可以猜测,因为只有几行执行涉及广播的操作。最有可能的是:

output[i,j] = np.sum( ssd_difference[i-2:i+2]*binomialFilter5())

您写道binomialFilter5()生成(5,1)数组,但错误是关于(5,)。这可能没关系,但你真的应该保持尺寸的数量。有时(5,1)(5,)显着不同。

output的形状为(ssd_difference.shape[0] - 4, ssd_difference.shape[1] - 4)。但是你在i,j上迭代range(len(ssd_difference))output[i,j]最终会产生index error。特别是在迭代2d数组时,最好使用正确的shape元素,而不是len()

但我怀疑ssd_difference[i-2:i+2]会立即产生错误。在i==0时,这是ssd_difference[-2:2]。这产生了(0,9)数组,因为-2索引意味着距离最后一个,大于2

我认为你打算从这个数组中拉出5行,以匹配另一个数组中的5个值。一个正确的迭代,我认为是:

for i in range(output.shape[0]):
    for j in range(output.shape[1]):
       ....
       output[i,j] = np.sum(ssd_difference[i:i+5, :] * binomialFilter5())
       ...

您应该在交互式shell中单独测试这样的表达式,并选择值issd_difference[i:i+5, :]的形状应为(5,9)binomialFilter5()应为(5,1)