2013-08-28 29 views
7

Tôi muốn nội suy một đám mây điểm 3D đã cho:tương tự với scipy.interpolate.griddata?

Tôi đã xem xét scipy.interpolate.griddata và kết quả chính xác là những gì tôi cần, nhưng như tôi hiểu, tôi cần nhập "griddata" như x = [[0,0,0],[1,1,1],[2,2,2]].

Nhưng đám mây điểm 3D của tôi không có giao diện lưới này - Giá trị x, y không hoạt động như lưới - dù sao chỉ có một giá trị z duy nhất cho mỗi giá trị x, y. *

Vì vậy, có một giải pháp thay thế cho scipy.interpolate.griddata cho đám mây không-trong-lưới-điểm của tôi?

* chỉnh sửa: "không nhìn lưới" có nghĩa là đầu vào của tôi trông như thế này:

x = [0,4,17] 
y = [-7,25,116] 
z = [50,112,47] 
+3

Tên gây hiểu lầm: 'griddata' lấy dữ liệu phi cấu trúc, chẳng hạn như của bạn và nội suy nó. Tôi đoán tên đến từ nó thường được sử dụng để resample một đám mây của các điểm vào một lưới thích hợp. Đọc [docs] (http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html), ví dụ đã làm việc khá rõ ràng về cách sử dụng nó. Nếu bạn đang đi đến interpoalte hơn nhiều hơn một tập hợp các điểm, bạn nên xem xét việc sử dụng các đối tượng interpoaltor đề cập đến trong các tài liệu thay vì: bạn không muốn được xây dựng các nội suy nhiều hơn một lần. – Jaime

+0

Oh cảm ơn bạn, tôi hiểu rồi! – Munchkin

+0

Tôi có một câu hỏi ngoài (hoặc tôi nên bắt đầu một chủ đề mới cho nó?) Có thể "cắt" một giá trị z nhất định ra khỏi nội suy này? Có nghĩa là, tôi muốn nhập giá trị z và muốn lấy lại một số loại hàm mô tả "vỏ bọc" tại giá trị z đó - hoặc chỉ trả lại cho tôi vùng bên trong vỏ đó. – Munchkin

Trả lời

6

Đây là một chức năng tôi sử dụng cho loại công cụ này:

from numpy import linspace, meshgrid 

def grid(x, y, z, resX=100, resY=100): 
    "Convert 3 column data to matplotlib grid" 
    xi = linspace(min(x), max(x), resX) 
    yi = linspace(min(y), max(y), resY) 
    Z = griddata(x, y, z, xi, yi) 
    X, Y = meshgrid(xi, yi) 
    return X, Y, Z 

Sau đó, sử dụng nó như này:

X, Y, Z = grid(x, y, z) 
0

Scipy có tài liệu với ví dụ cụ thể về cách sử dụng scipy.interpo late.griddata và họ giải thích chính xác những gì bạn đang yêu cầu. Nhìn đây: http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html

Nói tóm lại, bạn làm điều này có được "dữ liệu lưới":

grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j] 

này sẽ làm cho một mạng lưới 100x200 trong đó khoảng 0-1 ở cả x và y hướng .

grid_x, grid_y = np.mgrid[-10:10:51j, 0:2:20j] 

Điều này sẽ tạo ra lưới 51x20 nằm trong khoảng từ -10 đến 10 theo hướng x và từ 0 đến 2 theo hướng y.

Bây giờ bạn phải sửa đầu vào cho scipy.interpolate.griddata.

Các vấn đề liên quan