【问题标题】:Condition true if numpy array does't have dimension or if the dimension is less than n如果 numpy 数组没有维度或维度小于 n,则条件为真
【发布时间】:2017-01-07 18:09:35
【问题描述】:

我必须计算来自 while(true) 循环的前 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

【问题讨论】:

  • 你能显示first_frames的内容吗?
  • 它只是一个框架。我在上面添加了尺寸。 frame.shape = (480,640,3)
  • 你是否让那些frame 循环播放?
  • @Divakar 第 4 维。是的,它在一个循环中。来自网络摄像头。
  • 不要使用np.append,尤其不要这样。它不能替代列表append。

标签: python arrays numpy optimization multidimensional-array


【解决方案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)

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 2011-03-04
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多