首先,您應該運行以下代碼: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)