我一直在绕着这个看似简单的问题盘旋了好几个小时,但我似乎找不到答案。
设置很简单:给定一个浮点数组,对额外的点进行插值,以便以恒定(或近似恒定)的密度分布生成的插值数据。
标准插值有效,但是插值点的密度根本不是恒定的(右图):
我肯定会在这里遗漏一些明显的东西,因为我确信这个问题并不那么复杂,而且我已经苦苦挣扎了很长时间。
任何帮助深表感谢。
import numpy as np
import matplotlib.pyplot as plt
data = np.array([13.826, 13.608, 13.163, 13.034, 12.672, 12.126, 11.585, 11.192,
10.609, 10.082, 9.67 , 9.261, 9.175, 8.869, 8.408, 7.868,
7.317, 6.827, 6.52 , 6.375, 5.968, 5.601, 5.271, 5.242,
4.961, 4.888, 4.661, 4.395, 4.376, 4.286, 4.105, 4.019,
3.845, 3.785, 3.601, 3.371, 3.226, 3.156, 2.984, 2.96 ,
2.931, 2.786, 2.757, 2.62 , 2.554, 2.473, 2.464, 2.451,
2.309, 2.196, 2.15 , 2.061, 1.987, 1.907, 1.825, 1.803,
1.721, 1.62 , 1.595, 1.57 , 1.462, 1.346, 1.334, 1.208,
1.09 , 1.033, 0.94 , 0.874, 0.852, 0.857, 0.872, 0.884,
0.889, 0.888, 0.9 , 0.856, 0.756, 0.652, 0.567, 0.495,
0.432, 0.378, 0.331, 0.293, 0.264, 0.244, 0.232, 0.228,
0.228, 0.231, 0.239, 0.248, 0.261, 0.278, 0.308, 0.357,
0.417, 0.495, 0.575, 0.59 , 0.544, 0.465, 0.355, 0.246,
0.138, 0.032, -0.032, -0.075, -0.139, -0.179, -0.28 , -0.38 ,
-0.471, -0.565, -0.671, -0.772, -0.872, -0.974, -1.069, -1.164,
-1.257, -1.169, -1.131, -1.084, -1.016, -0.936, -0.846, -0.748,
-0.647, -0.546, -0.444, -0.348, -0.274, -0.159, -0.05 , 0.091,
0.145, 0.236, 0.318, 0.239, 0.105, -0.036, -0.168, -0.303,
-0.304, -0.429, -0.571, -0.685, -0.704, -0.806, -0.849, -0.865,
-0.835, -0.823, -0.892, -0.928, -0.978, -1.077, -1.156, -1.065,
-1.153, -1.244, -1.332, -1.426, -1.523, -1.623, -1.722, -1.819,
-1.918, -2.03 , -2.135, -2.233, -2.33 , -2.423, -2.516, -2.609,
-2.7 , -2.791, -2.88 , -2.948, -3.913])
# Number of points to interpolate
N = 1000
t = np.linspace(0, 1, N)
xp = np.linspace(0, 1, data.size)
# Interpolated data
d_interp = np.interp(t, xp, data)
plt.subplot(121)
plt.scatter(t, d_interp, label='Interpolated points')
plt.scatter(xp, data, s=4, label='Original data')
plt.legend()
plt.subplot(122)
plt.hist(d_interp, 25, label='Density of interpolated data')
plt.legend()
plt.show()
参考方案
您想采样y点而不是x点。采样y点很容易:
d_interp = np.linspace(data.min(), data.max(), N)
现在您要插值(y,x)而不是(x,y)。您可以尝试使用此方法,但这不起作用:
t = np.interp(d_interp, data, xp)
问题在于对相应的x点进行插值:np.interp
期望您的x
单调增加。实际上,通过在图表中选择随机的y
点(例如x=0
),可以得到2或3个对应的x点。因此,对于每个y
,您都不知道选择哪个x
。
我建议的解决方案是,鉴于您的功能大部分在减少,请使用遮罩过滤样本集:
mask = np.append(True, np.diff(data) < 0) #first points, plus all monotonally decreasing y points
d_interp = np.linspace(data.min(), data.max(), N)
t = np.interp(d_interp, data[mask][::-1], xp[mask][::-1])
numpy.savetxt“元组索引超出范围”? - python我试图在文本文件中写几行,这是我使用的代码:import numpy as np # Generate some test data data = np.arange(0.0,1000.0,50.0) with file('test.txt', 'w') as outfile: outfile.write('…
Python GPU资源利用 - python我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…
Python:图像处理可产生皱纹纸效果 - python也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…
Python uuid4,如何限制唯一字符的长度 - python在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…
Python sqlite3数据库已锁定 - python我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…