Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. '''
  2. Sun, 2019/5/20
  3. Cubist回归进行多光谱水深反演,利用rpy2调用R库Cubist
  4. * 输入参数[n_samples, n_features],即一个shape为(样点数,波段数)的矩阵
  5. * predice对象也要有相同的维数
  6. '''
  7. import os
  8. import rpy2
  9. print(rpy2.__version__)
  10. import pandas as pd
  11. import numpy as np
  12. from osgeo import gdal
  13. import math
  14. os.environ['R_USER'] = 'C:/ProgramData/Anaconda3/Lib/site-packages/rpy2'
  15. import rpy2.robjects as robjects
  16. from rpy2.robjects.packages import importr
  17. from rpy2.robjects.vectors import FloatVector
  18. import rpy2.robjects.conversion as conversion
  19. from rpy2.robjects import pandas2ri
  20. import rpy2.robjects.numpy2ri
  21. rpy2.robjects.pandas2ri.activate()
  22. rpy2.robjects.numpy2ri.activate()
  23. Cubist = importr('Cubist')
  24. lattice = importr('lattice')
  25. r = robjects.r
  26. import gc
  27. gc.get_threshold()
  28.  
  29.  
  30. # prepare the training point
  31. dt = r['read.csv'] ('H:/GF6_yantai/Bathymetry/area/yangdian/data_control.csv',sep=',',header=True)
  32. Z = FloatVector(dt[3])
  33. X = FloatVector(dt[4])
  34. X1 = FloatVector(dt[5])
  35. X2 = FloatVector(dt[11])
  36. X3 = FloatVector(dt[16])
  37. X4 = FloatVector(dt[17])
  38. X5 = FloatVector(dt[20])
  39. X6 = FloatVector(dt[24])
  40. T = r['cbind'](X=X,X1=X1,X2=X2,X3=X3,X4=X4,X5=X5,X6=X6)
  41. regr = r['cubist'](x=T,y=Z,committees=10)
  42. print(regr)
  43. del X,X1,X2,X3,X4,X5,X6
  44. gc.collect()
  45. # mapping water depth
  46. # rasters to be computed
  47. dt = gdal.Open("H:/bathmetry/GF6/cart/layer_stac")
  48. blue = dt.GetRasterBand(1).ReadAsArray(0,0,dt.RasterXSize, dt.RasterYSize)
  49. green = dt.GetRasterBand(2).ReadAsArray(0,0,dt.RasterXSize, dt.RasterYSize)
  50. yellow = dt.GetRasterBand(3).ReadAsArray(0,0,dt.RasterXSize, dt.RasterYSize)
  51. blue_violet = dt.GetRasterBand(4).ReadAsArray(0,0,dt.RasterXSize, dt.RasterYSize)
  52. blue_green = dt.GetRasterBand(5).ReadAsArray(0,0,dt.RasterXSize, dt.RasterYSize)
  53. green_violet = dt.GetRasterBand(6).ReadAsArray(0,0,dt.RasterXSize, dt.RasterYSize)
  54. yellow_violet = dt.GetRasterBand(7).ReadAsArray(0,0,dt.RasterXSize, dt.RasterYSize)
  55.  
  56. Blue = np.array(blue)
  57. B = Blue.ravel()
  58. Green = np.array(green)
  59. G = Green.ravel()
  60. Yellow = np.array(yellow)
  61. Y = Yellow.ravel()
  62. Blue_violet = np.array(blue_violet)
  63. BV = Blue_violet.ravel()
  64. Blue_green = np.array(blue_green)
  65. BG = Blue_green.ravel()
  66. Green_violet = np.array(green_violet)
  67. GV = Green_violet.ravel()
  68. Yellow_violet = np.array(yellow_violet)
  69. YV = Yellow_violet.ravel()
  70.  
  71. X_test = np.vstack((B,G,Y,BV,BG,GV,YV))
  72. print(X_test.shape)
  73.  
  74. del blue,green,yellow,blue_violet,blue_green,green_violet,yellow_violet
  75. del Blue,Green,Yellow,Blue_violet,Blue_green,Green_violet,Yellow_violet
  76. del B,G,Y,BV,BG,GV,YV
  77. gc.collect()
  78.  
  79. # Turn nan to 0
  80. X_test2 = []
  81. for i in range(X_test.shape[0]):
  82. for j in range(X_test.shape[1]):
  83. if math.isnan(X_test[i,j]) is True:
  84. X_test2.append(0)
  85. else:
  86. X_test2.append(X_test[i,j])
  87. X_test1 = np.array(X_test2).reshape(7,46623690).transpose()
  88.  
  89. del X_test
  90. del X_test2
  91. gc.collect()
  92.  
  93. X_test3 = r['as.matrix'](X_test1)
  94. Y_pred = r['predict'](regr,X_test3)
  95. print(Y_pred)
  96. z = np.array(Y_pred).reshape(5898,7905)
  97.  
  98. # 导出预测结果
  99. driver = gdal.GetDriverByName('GTiff')
  100. outDataSet = driver.Create('H:/bathmetry/GF6/Cubist1.tif', dt.RasterXSize, dt.RasterYSize, 1)
  101. outBand = outDataSet.GetRasterBand(1)
  102. outBand.WriteArray(z,0,0)
  103. outDataSet.SetProjection(dt.GetProjection())
  104. outDataSet.SetGeoTransform(dt.GetGeoTransform()) #写入仿射变换参数
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement