粗粒度大数据集到可以在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_orix_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=0i=-1),然后将这段代码应用到 x_new 而没有对应于 i=0 的极值和i=-1 在您对y_new 的定义中。

然后您只需连接这些数组。

【讨论】:

以上是关于粗粒度大数据集到可以在python上绘制的东西的主要内容,如果未能解决你的问题,请参考以下文章

shiro--颗粒度

粗粒度与细粒度权限控制

粗粒度与细粒度权限控制

千锋大数据开发面试题大全

微搭低代码从入门到精通09-数据容器

微搭低代码从入门到精通09-数据容器