我不确定我问的问题是否正确,但考虑两个标准x
和y
:
import numpy as np
import matplotlib.pyplot as plt
N = 1000
T = 1.0 / 800.0
x = np.linspace(0.0, N*T, N)
y = np.sin(2.0 * np.pi * x) + 0.5 * np.sin(3 * 2.0 * np.pi * x) \
+ 0.1 * np.random.uniform(-1.0, 1.0, N)
plt.plot(x, y)
plt.show()
现在把x_2
看作
M = 10
x_2 = np.linspace(0.0, N*T, N//M)
将x
分组到长度为M
的范围中的一种。现在我想在下面的伪代码中有y_m
和y_v
:
y_m = average of `y`es for x_2_(i-1) < x < x_2_(i)
y_v = variance of `y`es for x_2_(i-1) < x < x_2_(i)
适用于i
范围内的0 < i < N / M
。当然,我可以定义一些for循环,但考虑到我的数据集是巨大的,我正在寻找一个更矢量化的方式使用numpy功能。另外,请考虑我的实际数据没有分类。你知道吗
p.S.我被要求实施我所知道的方法:
M = 10
x_2 = np.linspace(x.min(), x.max(), N//M)
y_m = np.zeros(N // M - 1)
y_v = np.zeros(N // M - 1)
for ii in range(N // M - 1):
y_m[ii] = y[((x_2[ii] <= x) & (x < x_2[ii+1]))].mean()
y_v[ii] = np.var(y[((x_2[ii] <= x) & (x < x_2[ii+1]))])
plt.plot(x, y)
plt.plot(x_2[:-1], y_m)
plt.show()
p.S.2.一个想法是根据x
对压缩后的(x, y)
进行排序,然后重塑数据数组,然后计算特定轴的平均值和方差。你知道吗
因此,我开始使用numpy的
reshape
函数来实现我在p.S.2.中提出的想法:结果:
现在这个实现有两个主要的缺点,一个是它假设x数据是均匀分布和排序的,这不一定总是这样。你知道吗
相关问题 更多 >
编程相关推荐