我有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
我试图获得所有帧像素的平均值。为什么这些价值观是不同的?
发布于 2021-02-03 21:18:26
由于我还没有看到生成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)的第一个值。(不过,我还没有亲自测试过)。
发布于 2021-02-03 19:15:54
我不知道为什么,但是:
list1 = blurry_values[:600]给出0.89
list1 = blurry_values[600:1200]给出0.37
Python首先填充最后一个维度,我相信.
发布于 2021-02-03 19:31:38
让我们用一个更小的数组来处理这个问题:
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.5https://stackoverflow.com/questions/66033694
复制相似问题