首先,您应该运行以下代码:import numpy as np
X = np.asarray()
Y = np.asarray()
Z = np.asarray()
Xu = np.unique(X)
Yu = np.unique(Y)
然后您可以应用以下任何一种方法。值得注意的是,即使数据没有被分类(与目前接受的答案相反),所有这些方法都能正常工作:
1)一个for循环和numpy.where()函数
这也许是最简单、最易读的解决方案:
^{pr2}$
2)列表理解和numpy.sort()函数
这个解决方案比前一个方案更复杂一些,它依赖于Numpy的structured arrays:data_type = [('x', np.float), ('y', np.float), ('z', np.uint8)]
XYZ = [(X[i], Y[i], Z[i]) for i in range(len(X))]
table = np.array(XYZ, dtype=data_type)
Zimg = np.sort(table, order=['y', 'x'])['z'].reshape(Xu.size, Yu.size)
3)矢量化
使用lexsort是执行所需任务的优雅而高效的方法:Zimg = Z[np.lexsort((Y, X))].reshape(Xu.size, Yu.size)
4)纯Python,不使用NumPy
您可能想查看this link以获得一个没有任何第三方依赖关系的纯Python解决方案。在
最后,您有不同的选项将Zimg另存为图像:from PIL import Image
Image.fromarray(Zimg).save('z-pil.png')
import matplotlib.pyplot as plt
plt.imsave('z-matplotlib.png', Zimg)
import cv2
cv2.imwrite('z-cv2.png', Zimg)
import scipy.misc
scipy.misc.imsave('z-scipy.png', Zimg)