通常,Im使用图像数据,该图像数据的形状为m x n。显示很容易,对吗?
import numpy as np
import matplotlib.pyplot as plt
#sample data
m,n = 10,20
sample = np.random.random((m,n))
plt.imshow(sample)
从不同的算法中,Im现在获得的数据具有x,y,数据具有与m,n不同的形状,但范围相同。让我生成一些样本以更好地解释。
k = 300
x = np.random.random((k,)) * m
y = np.random.random((k,)) * n
data = np.random.random((k,))
我想做两件事,就是不要动脑子。
1)以imshow样式绘制数据
2)为获得更好的可比性,请将数据插值到矩形m,n网格上,即使用数据值(例如“最近”)生成形状为m,n的数组。
我实际上使用scipy.ndimage.map_coordinates来解决这个问题,但无法使它反向工作...
干杯
最佳答案
以下是scipy.interpolate.griddata用法的稍作更改的示例:
import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
k = 300
m, n = 10, 20
x = np.random.random((k,)) * m
y = np.random.random((k,)) * n
data = np.random.random((k,))
grid_x, grid_y = np.mgrid[0:m+1, 0:n+1]
grid_z0 = griddata((x, y), data, (grid_x, grid_y), method='nearest')
grid_z1 = griddata((x, y), data, (grid_x, grid_y), method='linear')
grid_z2 = griddata((x, y), data, (grid_x, grid_y), method='cubic')
plt.subplot(131)
plt.imshow(grid_z0.T)
plt.title('Nearest')
plt.subplot(132)
plt.imshow(grid_z1.T)
plt.title('Linear')
plt.subplot(133)
plt.imshow(grid_z2.T)
plt.title('Cubic')
plt.gcf().set_size_inches(6, 6)
plt.show()
关于python - Matplotlib插值/绘制非结构化数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40014554/