我在一个列表中保存了14400个值,代表垂直4像素,水平6像素和600帧。
如果有人感兴趣,这里是值
# len of blurry values 14400
data = np.array(blurry_values)
#shape of data (4, 6, 600)
shape = ( 4,6,600 )
data= data.reshape(shape)
#print(np.round(np.mean(data, axis=2),2))
[[0.89 0.37 0.45 0.44 0.51 0.52]
[0.5 0.47 0.53 0.48 0.48 0.53]
[0.49 0.5 0.5 0.53 0.48 0.54]
[0.48 0.51 0.45 0.55 0.5 0.49]]
然而,当我通过执行以下操作来确认第一个平均值的完整性时
list1 = blurry_values[::23]
np.round(np.mean(list1),2)
我得到0.51
而不是0.89
我试图在所有帧中获得像素的平均值。为什么这些值不同?
我不知道确切的原因,但是:
list1 = blurry_values[:600]
0.89为
list1 = blurry_values[600:1200]
0.37为
Python通过首先填充最后一个维度开始重塑,i believe.
让我们用一个更小的数组来解决这个问题:
import numpy as np
np.random.seed(42)
values = np.random.randint(low=0, high=100, size=48)
shape = (2,4,6)
data = values.reshape(shape) # 2 frames of 4 pixels by 6 pixels each
print(data, 'n')
print(np.round(np.mean(data, axis=0),2), 'n') # average values across frames
list1 = values[::24]
print(np.round(np.mean(list1),2)) # average of first pixel across frames
输出:
[[[51 92 14 71 60 20]
[82 86 74 74 87 99]
[23 2 21 52 1 87]
[29 37 1 63 59 20]]
[[32 75 57 21 88 48]
[90 58 41 91 59 79]
[14 61 61 46 61 50]
[54 63 2 50 6 20]]]
[[41.5 83.5 35.5 46. 74. 34. ]
[86. 72. 57.5 82.5 73. 89. ]
[18.5 31.5 41. 49. 31. 68.5]
[41.5 50. 1.5 56.5 32.5 20. ]]
41.5
因为我没有看到产生blurry_values
的代码,我不能100%确定,但我猜你错误地重新塑造了blurry_values
.
在大多数编程场景中,我希望像素高度和像素宽度由最后两个轴表示,帧由这两个轴之前的一个轴表示。
所以,我猜你的形状应该是shape = (600, 4, 6)
而不是shape = (4, 6, 600)
。
在这种情况下,你应该做np.round(np.mean(data, axis=0),2)
而不是np.round(np.mean(data, axis=2),2)
。顺便说一句,这也会产生(4, 6)
的形状。
list1 = blurry_values[::24] # Note that it's 24, not 23
np.round(np.mean(list1),2)
您应该检查np.round(np.mean(data, axis=0),2)
的第一个值是否与np.round(np.mean(list1),2)
的第一个值相同。(不过我自己还没有测试过)。