粗粒度大数据集到可以在python上绘制的东西
Posted
技术标签:
【中文标题】粗粒度大数据集到可以在python上绘制的东西【英文标题】:Coarse graining large data set to something that can be plotted on python 【发布时间】:2021-07-26 17:45:33 【问题描述】:假设我有
import numpy as np
import matplotlib. pyplot as plt
N_orig = 1000000
x_orig = np.linspace(0,np.pi,N_orig)
y_orig = np.sin(x_orig)
plt.plot(x_orig,y_orig,'*')
plt.show()
好的,任何像样的机器都可以运行这段代码,但无论如何它不是很实用。
我想通过执行类似的操作来粗化 x 坐标
N_new = 100
x_new = np.linspace(0,np.pi,N_new)
dx=abs(x_new[1]-x_new[0])
y_new = ???
使得y_new[i]
是y_new[i]=np.mean(y_orig[x[i]-dx/2 < x_orig and x_orig < x[i]+dx/2])
的值
我知道循环遍历i
是一种解决方案,但我想要更快的东西。有没有可用的例程?
【问题讨论】:
请再看一遍你写的(y_new
的定义),好像有几个错误……
@RandomGuy 到底在哪里?
【参考方案1】:
如果您的x
数组实际上是x_new
,那么您的问题有点过分了,因为您只是希望y_new
的值成为y_ori
在固定长度间隔上的手段(除了数组的两侧),x_ori
和 x_new
离散化相同的间隔,但步骤不同。
因此无需编写像y_orig[x[i]-dx/2 < x_orig and x_orig < x[i]+dx/2]
这样复杂的东西,您可以简单地计算y_ori
在这些区间上的均值。这样做:
fixed_len = ((x_new[1]-dx/2 < x_orig) & (x_orig < x_new[1]+dx/2)).sum() # No need to write this, you could calculate it directly with a bit of mathematics.
# Warning : don't do it on x_new[0] as you'll experience side effect
y_new = y_ori.reshape((-1, fixed_len)) # -1 so that the number of lines is automatically inferred.
y_new = np.mean(y_new, axis=1)
这种方法的缺点是它没有处理副作用(y_new
的开头和结尾,其中要平均的数组长度不等于 fixed_len
),因此它并不完全正确。一个简单的解决方案是在之前计算这些均值(也就是说,用你的公式计算 i=0
和 i=-1
),然后将这段代码应用到 x_new
而没有对应于 i=0
的极值和i=-1
在您对y_new
的定义中。
然后您只需连接这些数组。
【讨论】:
以上是关于粗粒度大数据集到可以在python上绘制的东西的主要内容,如果未能解决你的问题,请参考以下文章