如何解决QhullError:QH6154 Qhull精度错误:初始单纯形是平坦的构面1与内部点共面
我有一个值[725x725elements]的二维矩阵(numpy二维数组)。 8个元素是值,其他元素是NaN。所以我想插值到NaN。
arraynotnan=list(map(tuple,np.where(~np.isnan(arraysnow))))
print(arraynotnan)
arrayvalues=arraysnow[np.where(~np.isnan(arraysnow))]
print(arrayvalues)
x=arraynotnan[0]
y=arraynotnan[1]
print(x)
print(y)
a=np.arange(np.min(x),np.max(x)+1,10)
b=np.arange(np.min(y),np.max(y)+1,10)
print(a)
print(b)
X,Y=np.meshgrid(a,b)
ff=itr.griddata((x,y),arrayvalues,(X,Y),method='cubic')
然后我得到这个结果和错误:
.725 725
[(100,175,250,325,400,475,550,625),(100,625)]
[15.61 14.25 13.15 12.17 6.8 1.43 3.65 8.72]
(100,625)
(100,625)
[100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270
280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450
460 470 480 490 500 510 520 530 540 550 560 570 580 590 600 610 620]
[100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270
280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450
460 470 480 490 500 510 520 530 540 550 560 570 580 590 600 610 620]
---------------------------------------------------------------------------
QhullError Traceback (most recent call last)
<ipython-input-30-cf743564ac6e> in <module>
39 myModel=Model()
40 dynModel = DynamicFramework(myModel,lastTimeStep=25,firstTimestep=1)
---> 41 dynModel.run()
/opt/conda/lib/python3.7/site-packages/pcraster/framework/dynamicFramework.py in run(self)
63 self._runInitial()
64
---> 65 self._runDynamic()
66
67 # Only execute this section while running filter frameworks.
/opt/conda/lib/python3.7/site-packages/pcraster/framework/frameworkBase.py in _runDynamic(self)
369 self._incrementIndentLevel()
370 self._traceIn("dynamic")
--> 371 self._userModel().dynamic()
372 self._traceOut("dynamic")
373 self._decrementIndentLevel()
<ipython-input-30-cf743564ac6e> in dynamic(self)
28 print(X)
29
---> 30 ff=itr.griddata((x,method='cubic')
31
32 fig,ax=plt.subplots()
/opt/conda/lib/python3.7/site-packages/scipy/interpolate/ndgriddata.py in griddata(points,values,xi,method,fill_value,rescale)
221 elif method == 'cubic' and ndim == 2:
222 ip = CloughTocher2DInterpolator(points,fill_value=fill_value,--> 223 rescale=rescale)
224 return ip(xi)
225 else:
interpnd.pyx in scipy.interpolate.interpnd.CloughTocher2DInterpolator.__init__()
qhull.pyx in scipy.spatial.qhull.Delaunay.__init__()
qhull.pyx in scipy.spatial.qhull._Qhull.__init__()
QhullError: QH6154 Qhull precision error: Initial simplex is flat (facet 1 is coplanar with the
interior point)
While executing: | qhull d Qc Qz Q12 Qbb Qt
Options selected for Qhull 2019.1.r 2019/06/21:
run-id 442526900 delaunay Qcoplanar-keep Qz-infinity-point Q12-allow-wide
Qbbound-last Qtriangulate _pre-merge _zero-centrum Qinterior-keep Pgood
_ max-width 5.2e+02 Error-roundoff 8.7e-13 _one-merge 6.1e-12
Visible-distance 1.7e-12 U-max-coplanar 1.7e-12 Width-outside 3.5e-12
_wide-facet 1e-11 _maxoutside 6.9e-12
The input to qhull appears to be less than 3 dimensional,or a
computation has overflowed.
Qhull could not construct a clearly convex simplex from points:
- p1(v4): 1.8e+02 1.8e+02 31
- p8(v3): 3.6e+02 3.6e+02 6.2e+02
- p7(v2): 6.2e+02 6.2e+02 5.7e+02
- p0(v1): 1e+02 1e+02 0
The center point is coplanar with a facet,or a vertex is coplanar
with a neighboring facet. The maximum round off error for
computing distances is 8.7e-13. The center point,facets and distances
to the center point are as follows:
center point 315.6 315.6 305.6
facet p8 p7 p0 distance= 0
facet p1 p7 p0 distance= 0
facet p1 p8 p0 distance= 0
facet p1 p8 p7 distance= 0
These points either have a maximum or minimum x-coordinate,or
they maximize the determinant for k coordinates. Trial points
are first selected from points that maximize a coordinate.
The min and max coordinates for each dimension are:
0: 100 625 difference= 525
1: 100 625 difference= 525
2: 0 625 difference= 625
If the input should be full dimensional,you have several options that
may determine an initial simplex:
- use 'QJ' to joggle the input and make it full dimensional
- use 'QbB' to scale the points to the unit cube
- use 'QR0' to randomly rotate the input for different maximum points
- use 'Qs' to search all points for the initial simplex
- use 'En' to specify a maximum roundoff error less than 8.7e-13.
- trace execution with 'T3' to see the determinant for each point.
If the input is lower dimensional:
- use 'QJ' to joggle the input and make it full dimensional
- use 'Qbk:0Bk:0' to delete coordinate k from the input. You should
pick the coordinate with the least range. The hull will have the
correct topology.
- determine the flat containing the points,rotate the points
into a coordinate plane,and delete the other coordinates.
- add one or more points to make the input full dimensional.
Here被认为,如果x = y相同,这就是原因。但是,为什么不能插值到x = y的正方形上的点以及如何使我的坐标满足griddata函数的要求? 请,您能给我一个进一步思考的方向,或者也许是解决这个问题的方法。
解决方法
我的错。我有一种错误的方式来生成点,这些点位于二维表面上的一行中。现在有了一组完整的矩形点网格,一切正常。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。