2013-08-28 24 views
5

Tôi đang loại bỏ một số mã tôi đã viết cách đây vài tháng và vì lý do nào đó nó không hoạt động nữa ... Tóm lại , Tôi đang sử dụng các đối tượng scipy.interpolate.LinearNDInterpolator để nội suy các mô hình và so sánh với dữ liệu. Bây giờ, khi tôi cố gắng để gọi các đối tượng xen với các tọa độ mà tại đó tôi muốn suy, tôi nhận được lỗi sau:scipy.interpolate.interpnd phàn nàn về đối tượng 'Delaunay' không có thuộc tính 'simplices'

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' 

Tôi chưa bao giờ thấy lỗi này trước đây, và mã đã làm việc trước đó. Có điều gì đó chỉ thay đổi trong scipy mà tôi không biết?

Cảm ơn bạn đã tìm kiếm!

+0

Bạn có thể tạo một ví dụ đơn giản, khép kín thể hiện vấn đề này không? Bạn đang sử dụng phiên bản scipy nào trước đây và bạn đang sử dụng phiên bản nào? –

Trả lời

3

Tôi đoán bạn sử dụng một phiên bản cũ của thư viện:

Thư viện Delaunay có hai bộ truy xuất khác nhau cho simplices: "Delaunay.simplices" và "Delaunay.vertices" đưa ra ở đây (tài liệu mới nhất): http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.Delaunay.html

Trong số hai Delaunay.vertices được đánh dấu là "không được chấp nhận".

Trên Ubuntu 13.04 cuộc gọi simplices không tồn tại tuy nhiên, bởi vì nó vẫn sử dụng scipy 0.11.0: http://docs.scipy.org/doc/scipy-0.11.0/reference/generated/scipy.spatial.Delaunay.html#scipy.spatial.Delaunay

Hãy thử với ví dụ tối thiểu này hoặc chỉ viết lại simplices bạn gọi tới đỉnh:

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] 
Các vấn đề liên quan