前提・実現したいこと
scipy の LinearNDInterpolatorを使って、多次元(N=2~4)線形補間を行うプログラムを書いています。
外挿を行う必要はありません。
ここで、端点より外側の点を補間対象にした際は、端点の値を使用するようにしたいです。
numpy.interp と同じような挙動になってほしい。
発生している問題・エラーメッセージ
公式リファレンス に記載されているように、
Value used to fill in for requested points outside of the convex hull of the input points. If not provided, then the default is nan.
端点より外側の点を補間対象にすると、nan になってしまいます。
該当のソースコード
Python
1import numpy as np 2from scipy.interpolate import LinearNDInterpolator 3 4# 補間元のデータサンプル 5x = np.linspace(0, 10, 3) 6y = np.linspace(0, 10, 3) 7 8x, y = np.meshgrid(x,y) 9z = x ** 2 + y**2 10 11# LinearNDInterpolator を利用 12interp = LinearNDInterpolator(list(zip(x.ravel(),y.ravel())), z.ravel()) 13 14# 補間する位置のサンプル 15X = np.linspace(-2, 10, 11) 16Y = np.linspace(0, 10, 11) 17X, Y = np.meshgrid(X,Y) 18 19Z = interp(X,Y) 20 21# print(Z) 22# [[ nan nan 2. 8. 14. 20. 28. 46. 64. 82. 100.] 23# [ nan nan 7. 13. 19. 25. 33. 51. 69. 87. 105.] 24# [ nan nan 12. 18. 24. 30. 38. 56. 74. 92. 110.] 25# [ nan nan 17. 23. 29. 35. 43. 61. 79. 97. 115.] 26# [ nan nan 22. 28. 34. 40. 48. 66. 84. 102. 120.] 27# [ nan nan 27. 33. 39. 45. 53. 71. 89. 107. 125.] 28# [ nan nan 42. 48. 54. 60. 68. 86. 104. 122. 140.] 29# [ nan nan 57. 63. 69. 75. 83. 101. 119. 137. 155.] 30# [ nan nan 72. 78. 84. 90. 98. 116. 134. 152. 170.] 31# [ nan nan 87. 93. 99. 105. 113. 131. 149. 167. 185.] 32# [ nan nan 102. 108. 114. 120. 128. 146. 164. 182. 200.]] 33 34# 望んでいる結果 35# [[ 0. 0. 2. 8. 14. 20. 28. 46. 64. 82. 100.] 36# (中略) 37# [ 100. 100. 102. 108. 114. 120. 128. 146. 164. 182. 200.]] 38
試したこと
上記コードの末尾に例示。
ググってみましたが、「www.it-swarm-ja」などのク◯サイトばかりでてきます。
補足情報(FW/ツールのバージョンなど)
Python
numpy
scipy
回答1件
あなたの回答
tips
プレビュー