通常,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/

10-12 21:48
查看更多