Python 数列平均

Python 数列平均,python,numpy,Python,Numpy,numpy_frames_original是视频中的帧。首先,我想找到这些帧的平均值,然后从每个帧中减去它,得到numpy_帧。对于我试图解决的问题,我认为找到所有这些帧的平均值是个好主意,为此,我编写了以下代码: arr=np.zeros((height,width), np.float) for i in range(0, number_frames): imarr=np.array(numpy_frames_original[i,:,:].astype(float)) a

numpy_frames_original是视频中的帧。首先,我想找到这些帧的平均值,然后从每个帧中减去它,得到numpy_帧。对于我试图解决的问题,我认为找到所有这些帧的平均值是个好主意,为此,我编写了以下代码:

arr=np.zeros((height,width), np.float)

for i in range(0, number_frames):
    imarr=np.array(numpy_frames_original[i,:,:].astype(float))
    arr=arr+imarr/number_frames

img_avg=np.array(np.round(arr),dtype=np.uint8)
numpy_frames = np.array(np.absolute(np.round(np.array(numpy_frames_original.astype(float))-np.array(img_avg.astype(float)))), dtype=np.uint8)
现在我决定最好不要对所有的帧进行平均,而是对每一帧减去最接近它的100帧的平均值

我不知道怎么写这段代码

例如,对于第0帧,它将平均第0-99帧,然后减去平均值。对于第3帧,它还将平均帧0-99并进行减法运算,对于第62帧,它将平均帧12-112并进行减法运算


谢谢

我想这正是你需要的

import numpy

# Create some fake data
frame_count = 10
frame_width = 2
frame_height = 3
frames = numpy.random.randn(frame_count, frame_width, frame_height).astype(numpy.float32)
print 'Original frames\n', frames

# Compute the modified frames over a specified range
mean_range_size = 2
assert frame_count >= mean_range_size * 2

start_mean = frames[:2 * mean_range_size + 1].mean(axis=0)
start_frames = frames[:mean_range_size] - start_mean

middle_frames = numpy.empty((frames.shape[0] - 2 * mean_range_size,
                             frames.shape[1], frames.shape[2]),
                            dtype=frames.dtype)

for index in xrange(middle_frames.shape[0]):
    middle_frames[index] = frames[mean_range_size + index] - \
                           frames[index:index + 2 * mean_range_size + 1].mean(axis=0)

end_mean = frames[-2 * mean_range_size - 1:].mean(axis=0)
end_frames = frames[-mean_range_size:] - end_mean

modified_frames = numpy.concatenate([start_frames, middle_frames, end_frames])
print 'Modified frames\n', modified_frames

注意断言,如果最短序列小于总范围大小(例如100帧),则需要修改代码。

感谢您的尝试,这适用于开始帧和结束帧。然而,对于中间帧,我认为存在一个问题。我得到的是相同的帧。我找不到错误?有一个bug(现已修复),但它并没有导致中间帧完全相同。如果中间帧彼此非常相似,或者已经是相邻帧的平均值,则可能发生这种情况。我在新版本中添加了一些照片,证明中间的框架是不同的。这是一个非常好的解决方案,谢谢