5

我正在清理几个月前编写的一些代码,由于某种原因它不再起作用了……简而言之,我正在使用 scipy.interpolate.LinearNDInterpolator 对象来插入模型并与数据进行比较。现在,当我尝试使用我想要插值的坐标调用插值器对象时,出现以下错误:

In [9]: a([[3500, 3.5, 1.5]])
AttributeError                            Traceback (most recent call last)
<ipython-input-9-91f2103e7a0c> in <module>()
----> 1 a([[3500, 3.5, 1.5]])

/usr/lib64/python2.7/site-packages/scipy/interpolate/interpnd.so in     scipy.interpolate.interpnd.NDInterpolatorBase.__call__ (scipy/interpolate/interpnd.c:3133)()

/usr/lib64/python2.7/site-packages/scipy/interpolate/interpnd.so in     scipy.interpolate.interpnd.LinearNDInterpolator._evaluate_double (scipy/interpolate/interpnd.c:3954)()

/usr/lib64/python2.7/site-packages/scipy/interpolate/interpnd.so in scipy.interpolate.interpnd.LinearNDInterpolator._do_evaluate (scipy/interpolate/interpnd.c:4684)()

AttributeError: 'Delaunay' object has no attribute 'simplices'

我以前从未见过此错误,并且该代码以前可以正常工作。我不知道的 scipy 发生了什么变化吗?

感谢您的关注!

4

1 回答 1

3

我猜你使用的是旧版本的库:

Delaunay 库有两种不同的单纯形访问器:此处显示的“Delaunay.simplices”和“Delaunay.vertices”(最新文档):http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial。德劳内.html

两个 Delaunay.vertices 被标记为“已弃用”。

然而,在 Ubuntu 13.04 上,simplices 调用不存在,因为它仍然使用 scipy 0.11.0: http ://docs.scipy.org/doc/scipy-0.11.0/reference/generated/scipy.spatial.Delaunay.html# scipy.spatial.Delaunay

试试这个最小的例子,或者只是重写你对顶点的简单调用:

from __future__ import print_function

import numpy as np
from scipy.spatial import Delaunay
import sys

my_molecule = np.random.rand(400,3) #points for query
points = np.random.rand(1000, 3)   #points used for Triangulation

diag = Delaunay(points)
simplices = diag.find_simplex(my_molecule)

for point,simplex in zip(my_molecule,simplices):
    if simplex == -1:
        print ("Point not included in diag.")
        continue
    print ("Doing vertices call: ")
    spoints = diag.vertices[simplex]
    print ("Doing simplices call: ")
    spoints = diag.simplices[simplex]
于 2013-09-03T13:15:40.260 回答