Max*_*6hr 5 python grid interpolation numpy word-wrap
我有圆形数据的网格,例如,该数据是由它的角度从给定0到?。在此数据中,我还有另一个较小的网格。
可能看起来像这样:
我想要做的是在红点上插入黑色数据。因此,我正在使用scipy.interpolate.griddata。这将给我以下结果:
如您所见,当角度从“几乎0” 更改为“几乎” 时,将出现不连续性?。
为了消除这种情况,我尝试在插值之前解开数据。根据此答案(此处)。我得到了这个(更好)的结果,但是令人惊讶的是,右边有一个我不理解的新矛盾。
所以我的问题是:如何使用np.unwrap连续插值?还是有更好的方法呢?
这是要重现的代码:
import numpy as np
from matplotlib import pyplot as plt
from scipy.interpolate import griddata
ax = plt.subplot()
ax.set_aspect(1)
# Simulate some given data.
x, y = np.meshgrid(np.linspace(-10, 10, 20), np.linspace(-10, 10, 20))
phi = np.arctan2(y, x) % (2 * np.pi)
data = np.arctan2(np.cos(phi), np.sin(phi)) % np.pi
# Plot data.
u = np.cos(data)
v = np.sin(data)
ax.quiver(x, y, u, v, headlength=0.01, headaxislength=0, pivot='middle', units='xy')
# Create a smaller grid within.
x1, y1 = np.meshgrid(np.linspace(-6, 5, 20), np.linspace(-4, 8, 25))
# ax.plot(x1, y1, '.', color='red', markersize=2)
# Prepare data.
data = np.unwrap(2 * data) / 2
# Interpolate data on grid.
interpolation = griddata((x.flatten(), y.flatten()), data.flatten(), (x1.flatten(), y1.flatten()))
# Plot interpolated data.
u1 = np.cos(interpolation)
v1 = np.sin(interpolation)
ax.quiver(x1, y1, u1, v1, headlength=0.01, headaxislength=0, pivot='middle', units='xy',
scale=3, width=0.03, color='red')
plt.show()
Run Code Online (Sandbox Code Playgroud)
要正确处理圆量,请在调用之前将角度转换为复数griddata,然后再转换回角度:
c=np.exp(2j*data) # 0,pi -> 1\n# \xe2\x80\xa6\na=np.angle(interpolation)/2\nRun Code Online (Sandbox Code Playgroud)\n\n因数 2 将 [0,\xcf\x80) 扩展到整个圆,然后再返回。请注意,调用中隐含的归一化angle对于在输入数据的一个 \xe2\x80\x9cgrid cell\xe2\x80\x9d 内变化太大的输入非常敏感。
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |