【发布时间】:2016-06-16 03:20:00
【问题描述】:
我在长度为 2048 的列中以 0-255 的整数表示来自传感器的大量数据,并且在同一个 2D numpy 数组中至少有 10000 行。我希望将所有行平均在一起以获得一列浮点数并绘制它们。很简单吧?
当行数少于 1000 时,我的图表看起来很漂亮,而且根本没有量化。平均是显而易见的。 当有超过 10000 行时,我的图表看起来更糟 - 比较小数组的平均值看起来更量化,即使它都是由浮点数组成的,它非常接近整数,很痛苦。
我要问的是:为什么会这样?平均应该“平滑”传感器测量。当我采集更长的数据样本时,它们现在更加嘈杂(和量化)!
这是我当前代码的示例:
import matplotlib.pyplot as plt
import numpy as np
lower_bound=0
upper_bound=2048
#this loads data into raw_array as [n rows][2048 columns]
raw_array=np.loadtxt('raw_data.txt',dtype=int)
avg_array=np.mean(raw_array,0) #averages over zeroth column
x_inc=np.arange(lower_bound,upper_bound)
plt.plot(x_inc[lower_bound,upper_bound],avg_array[lower_bound,upper_bound])
plt.show()
【问题讨论】:
-
你能给我们看一些例子吗?
-
我认为你的情节陈述中的
avg应该是avg_array(可能在复制时发生)。为什么你需要[lower_bound,upper_bound]的切片呢?我以为数组保证有 2048 列? -
三件事,
np.mean(raw_array, 0)平均在第 0 轴,而不是第 0 列。其次,如果你读入的时候为什么不把数据赋值给dtype=numpy.float32,而不是int,最后,np.arange在很多情况下是不可靠的,你应该改用np.linspace。 -
@Benjamin,1. 我没有意识到情况是这样,至于第 0 轴与第 0 列。谢谢你。 2. 我试过了,它没有改变任何东西。 3. arange 怎么可能不可靠?我不知道。我会尝试 linspace 并回复您。
-
@StefanS,正确的。它确实发生在复制过程中。我需要切片的原因是能够放大数据的特定时间范围。
标签: python arrays numpy matplotlib