2012-01-09 36 views
5

Tôi có một lưới lưới lớn các điểm dữ liệu mà tôi đã tạo ra từ mô phỏng và liên kết với mỗi điểm trong mặt phẳng xy là giá trị z (kết quả của mô phỏng).Khối lượng trong "mặt phẳng" được xác định bởi các điểm dữ liệu - python

Tôi có giá trị x, y, z được đổ vào một tệp văn bản thuần túy và điều tôi muốn làm là đo thể tích giữa mặt phẳng xy (ví dụ z = 0) và "mặt phẳng" được xác định bởi các điểm dữ liệu. Các điểm dữ liệu hiện không phải là khoảng cách thống nhất, mặc dù chúng NÊN một khi các mô phỏng đã kết thúc chạy.

Tôi đã xem qua tài liệu scipy và tôi không chắc chắn liệu scipy.integrate có cung cấp chức năng tôi cần hay không - có vẻ như chỉ có khả năng thực hiện việc này trong 2ngày, không phải 3d như tôi cần. Để bắt đầu, trừ khi cần thiết, tôi có thể làm mà không có nội suy, tích hợp dựa hoàn toàn vào "quy tắc hình thang" hoặc xấp xỉ tương tự là cơ sở tốt để bắt đầu.

Mọi trợ giúp đều được đánh giá cao.

cảm ơn

CHỈNH SỬA: cả hai giải pháp được mô tả bên dưới hoạt động tốt. Trong trường hợp của tôi, nó quay ra bằng cách sử dụng một spline có thể gây ra "gợn sóng" xung quanh cực đại sắc nét trong mặt phẳng, vì vậy phương pháp Delaunay hoạt động tốt hơn, nhưng tôi khuyên mọi người nên kiểm tra cả hai.

Trả lời

3

Nếu bạn muốn nghiêm dính vào quy tắc hình thang bạn có thể làm điều gì đó tương tự như sau:

import numpy as np 
import scipy.spatial 

def main(): 
    xyz = np.random.random((100, 3)) 
    area_underneath = trapezoidal_area(xyz) 
    print area_underneath 

def trapezoidal_area(xyz): 
    """Calculate volume under a surface defined by irregularly spaced points 
    using delaunay triangulation. "x,y,z" is a <numpoints x 3> shaped ndarray.""" 
    d = scipy.spatial.Delaunay(xyz[:,:2]) 
    tri = xyz[d.vertices] 

    a = tri[:,0,:2] - tri[:,1,:2] 
    b = tri[:,0,:2] - tri[:,2,:2] 
    proj_area = np.cross(a, b).sum(axis=-1) 
    zavg = tri[:,:,2].sum(axis=1) 
    vol = zavg * np.abs(proj_area)/6.0 
    return vol.sum() 

main() 

Dù spline hoặc tuyến tính (trapezodial) suy là một sự phù hợp tốt hơn sẽ phụ thuộc rất nhiều vào vấn đề của bạn.

+0

cảm ơn, tôi cũng sẽ xem xét giải pháp thay thế này. – samb8s

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