如果numpy数组没有维度或维度小于n,则条件为true

时间:2017-01-06 17:40:34

标签: python arrays numpy optimization multidimensional-array

我必须计算来自一段时间(真实)循环的前30帧的平均值(平均值)。 如何仅在第四维小于30或没有第四维时才将第二条件转化为真? 还有其他优化代码的方法吗? frame.shape =(480,640,3)。值为0到255。

    if isFirst == True:
        first_frames = frame
        isFirst == False

    if first_frames.shape[3] < 30:
        np.append(first_frames, frame, axis=3)
        avg_frames = np.mean(first_frames, axis=3)

    new_frame = frame - avg_frames

1 个答案:

答案 0 :(得分:1)

我建议初始化一个数组来存储所有帧的运行总和,直到前30帧,为此我们可以有一个循环迭代范围。在每个循环结束时,我们将通过将运行总和除以循环迭代器来计算平均帧。就这样!我们的想法是通过使用3D数组来存储求和而不是附加到昂贵的4D阵列上来优化内存。

因此,实施将是 -

# Initialize array for storing running summation
first_frames = np.zeros((480,640,3),dtype=np.uint64)

for i in range(30):       # Runs until first 30 frames
    first_frames += frame # Add each frame
    new_frame = frame - first_frames/float(i)