Nội suy phân tán python

Tôi gặp vấn đề với nội suy các điểm dữ liệu 3D trong Python. Tôi có cấu trúc dữ liệu đơn giản như thế này

Nội dung chính Hiển thị

  • Mã kiểm tra
  • Nội suy gì?
  • Nội suy 1D
  • Nội suy 2D
  • Nội suy 3D

class Point( object ):
def __init__( self, x, y, z, data ):
    self.x, self.y, self.z = x, y, z
    self.data = data

X, Y, Z là tọa độ trong không gian 3D Cartesian, dữ liệu là giá trị vô hướng tại thời điểm này

Tôi đã thử phương pháp được hiển thị ở đây. Nội suy/Subpling của dữ liệu 3D trong Python không có VTK, nhưng tôi có vấn đề để nó hoạt động chính xác

Bạn có thể nội suy hai trục một cách độc lập như

Mã số

def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y

Mã kiểm tra

import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))

Kết quả

(174269.53842923077, 608480.2517169231)
(174269.78004461539, 608472.5631784615)

(174267.92426830987, 608531.6163683098)
scipy.interpolate.interp(1D, 2D, 3D)

Trong bài viết này, chúng tôi sẽ khám phá cách thực hiện phép nội suy trong Python, sử dụng thư viện SCIPY

SCIPY cung cấp rất nhiều chức năng hữu ích cho phép xử lý toán học và tối ưu hóa phân tích dữ liệu. Cụ thể hơn, nói về nội suy dữ liệu, nó cung cấp một số chức năng hữu ích để có thể cho phép nội suy nhanh và chính xác, bắt đầu từ một tập hợp các điểm dữ liệu đã biết. Trong văn bản sau, chúng tôi sẽ phân tích ba kịch bản nội suy khác nhau; . xử lý toán học và tối ưu hóa phân tích dữ liệu. Cụ thể hơn, nói về nội suy dữ liệu, nó cung cấp một số chức năng hữu ích để có được phép nội suy nhanh và chính xác, bắt đầu từ một tập hợp các điểm dữ liệu đã biết. Trong văn bản sau đây, chúng tôi sẽ phân tích ba kịch bản nội suy khác nhau;

Các chức năng sẽ được sử dụng trong đoạn mã được lấy từ thư viện

def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
8 and times as.
def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
9,
import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
0 và
import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
1

Nội suy gì?

Từ quan điểm toán học, phép nội suy cho biết quá trình thu được giá trị của các điểm dữ liệu chưa biết cụ thể có thể nằm giữa một số điểm dữ liệu đã biết khác, sau khi mô tả tập hợp các điểm dữ liệu đã biết

Ví dụ. if they ta has a series of data data x0, x1, x2, then xn xn and they we know the value y0, y1, y2, Hồi yn (with yn = f(xn)), information through too the content

Các đoạn sau giải thích cách thực hiện cho phép nội suy khi xử lý các bộ dữ liệu 1, 2 hoặc 3 chiều. Để làm điều đó, chúng tôi sẽ dựa vào thư viện Python scipy, cụ thể hơn là vào một trong các gói của nó được gọi là

_______ 22 cung cấp chức năng _______ 23 để thực hiện một cách dễ dàng và ngay lập tức nhiệm vụ này

Nội suy 1D

Please started by the first entry function will be used to thực hiện cho phép nội suy

Như đã được giới thiệu, chức năng được gọi là

import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
4) và thuộc gói SCIPY. Vì chúng tôi sẽ sử dụng các chức năng nội suy khác nhau cho từng kích thước (tất cả chúng thuộc về
import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
5), chúng tôi sẽ chỉ nhập
import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
5 từ thư viện SCIPY. Trước hết, chúng ta cần tạo một tập dữ liệu sẽ được sử dụng để hiển thị quá trình nội suy. Chúng tôi sẽ làm điều này, xác định một mảng X (sử dụng hàm numpy
import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
7) trong mười số cách đều nhau, dao động từ 0 đến 100. Mảng y, instead of that, will be verify by the following method

Nội suy phân tán python

def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
5

Do quá trình nội suy cho phép thu được giá trị của các điểm chưa biết nằm trong phạm vi của các điểm đã biết, giờ đây chúng tôi xác định một mảng X khác sẽ chứa nhiều điểm hơn mảng X đầu tiên (X X X). Cụ thể, chúng tôi khai thác lại

import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
7 to build a array bao gồm 100 số cách đều nhau. Sau đó, chúng tôi gọi đây là mảng này là x_new.
def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
7

Tại thời điểm này, chúng tôi đã có thể nội suy tập dữ liệu ban đầu của mình và thu được giá trị của các điểm mới mà chúng tôi đã lưu trữ trong mảng X_New. Để làm điều đó, chúng tôi khai thác hàm

import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
9; . Một đầu vào tùy chọn khác nhưng rất quan trọng có thể chỉ được định nghĩa cho hàm
def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
9 là loại, chỉ định loại chức năng sẽ được sử dụng trong quá trình nội suy. Có nhiều tùy chọn loại hình của người Viking, họ là.
import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
0

Được sử dụng rộng rãi nhất là

(174269.53842923077, 608480.2517169231)
(174269.78004461539, 608472.5631784615)

(174267.92426830987, 608531.6163683098)
1,
(174269.53842923077, 608480.2517169231)
(174269.78004461539, 608472.5631784615)

(174267.92426830987, 608531.6163683098)
2,
(174269.53842923077, 608480.2517169231)
(174269.78004461539, 608472.5631784615)

(174267.92426830987, 608531.6163683098)
3 và
(174269.53842923077, 608480.2517169231)
(174269.78004461539, 608472.5631784615)

(174267.92426830987, 608531.6163683098)
4, trong đó đề cập đến việc cho phép nội suy spline của Zeroth, thứ nhất, thứ hai hoặc thứ ba, tương ứng.
(174269.53842923077, 608480.2517169231)
(174269.78004461539, 608472.5631784615)

(174267.92426830987, 608531.6163683098)
5 và
(174269.53842923077, 608480.2517169231)
(174269.78004461539, 608472.5631784615)

(174267.92426830987, 608531.6163683098)
6 Chỉ cần trả lại giá trị trước hoặc tiếp theo của điểm (vui lòng tham khảo https. // tài liệu. scipy. org/doc/scipy/tham chiếu/đã tạo/scipy. nội suy. interp1d. html để biết tài liệu đã hoàn chỉnh trên
def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
9)

Để xem tất cả các chức năng nội suy khác nhau được vẽ giống nhau, chúng ta có thể khai thác một vòng lặp và lặp lại quá trình nội suy và vẽ đồ thị các điểm dữ liệu, như được hiển thị trong đoạn mã bên dưới

import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
8

Như bạn có thể thấy trong đoạn mã, trong vòng lặp, chúng tôi thực hiện cho phép nội suy bằng cách gọi hàm

def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
9 and đưa ra đầu vào mảng X và Y đã được xác định ở đầu đoạn; . Ở mỗi bước lặp, các loại nội suy của loại khác sẽ thay đổi, lựa chọn theo các loại khác nhau có trong danh sách loại. Để cuối cùng có được đánh giá của các điểm chưa biết, có trong mảng, x_new, chúng tôi xác định mảng Kết quả cuối cùng được hiển thị trong Hình 1

Hình 1. Các nội hàm suy khác nhau (các loại). Các dấu chấm màu xanh là điểm cấm dữ liệu đầu tiên, được biết đến; . Các hàm nội suy khác nhau (các loại). Các chấm màu xanh lam là các điểm dữ liệu ban đầu, đã biết;

Điều quan trọng là nhấn mạnh rằng các điểm duy nhất được biết đến mà chúng tôi đã lấy tất cả các ô được hiển thị trong Hình 1, là những điểm màu xanh (mười điểm). Thông qua quá trình nội suy, chúng tôi đã thu được giá trị của tất cả các điểm nằm giữa phạm vi của mười điểm dữ liệu này. Nói chung, khi nội suy một tập dữ liệu được định rõ nhất, điều quan trọng là phải có thêm thông tin tốt nhất để có thể phân phối các điểm dữ liệu đã biết; . Tuy nhiên, trong hầu hết các trường hợp, nội suy cấp hai và khối là những trường hợp mang lại kết quả tốt nhất, như bạn có thể thấy, chúng được đặt chồng lên hầu hết các điểm dữ liệu. &NBSP;

Nội suy 2D

Bây giờ chúng tôi đã giới thiệu quy trình nội suy trên bộ dữ liệu một chiều, đó là thời gian để áp dụng các điều kiện tương tự theo hai chiều. Như bạn sẽ thấy, thủ tục rất giống nhau;

import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
0

Vì chúng tôi đang xử lý các điểm dữ liệu hai chiều, để vẽ nên chúng tôi cần tạo một lưới các điểm và sau đó gán một công cụ giá trị có thể cho tất cả các điểm trên lưới;

Để xây dựng lưới các điểm của chúng tôi, trước tiên chúng tôi xác định một mảng X và Y (được gọi là X X và và Y) bằng cách sử dụng

import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
7; . Để xác định lưới từ hai mảng này, chúng tôi sử dụng hàm numpy
scipy.interpolate.interp(1D, 2D, 3D)
1. Đoạn mã sau đây mô tả công việc tạo lưới.
(174269.53842923077, 608480.2517169231)
(174269.78004461539, 608472.5631784615)

(174267.92426830987, 608531.6163683098)
3

Để hoàn thành định nghĩa về lệnh cấm dữ liệu ban đầu của bộ điểm của chúng tôi, chúng tôi phải gán một công cụ giá trị có thể cho tất cả các cặp (x, y) của các điểm trên lưới. Để làm điều đó, chúng tôi xác định một mảng mới có tên Z, phụ thuộc vào các giá trị của X và Y (các điểm của lưới) và được xác định bởi phương pháp sau

def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
0

Tương tự như những gì chúng tôi đã làm trong trường hợp một chiều, giờ đây chúng tôi xác định một lưới mới và dày đặc hơn có chứa các điểm sẽ được nội suy từ các giá trị (x, y). 65 điểm của lưới mới này vẫn nằm trong khoảng từ 0 đến bốn và được lưu trữ trong mảng X2 X2 và Y2 Y2. Quá trình này giống như quy trình được sử dụng để xác định lưới đầu tiên

def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
1

Bước tiếp theo là nội suy;

import numpy as np

# arbitrary z
z1, x1, y1 = 0.822, 174269.8332, 608470.8717
z2, x2, y2 = 0.692, 174269.5191, 608480.8668

print(find_xy((x1, y1, z1), (x2, y2, z2), .7))
print(find_xy((x1, y1, z1), (x2, y2, z2), .8))

# z = 0
z1, x1, y1 = 0.022, 174267.9486, 608530.8421
z2, x2, y2 = -0.262, 174267.6345, 608540.8372

print(find_xy((x1, y1, z1), (x2, y2, z2), 0))
0 và gán đầu ra của nó (hàm nội suy) cho biến F F F F. Ngoài trường hợp hai chiều, chúng ta có thể chọn bất kỳ loại chức năng nào của chức năng nội suy để sử dụng trong quy trình, lần này chỉ có ba tùy chọn Được sử dụng trong nội suy được phép (để biết thêm về khái niệm spline . // vi. wikipedia. org/wiki/spline(toán học)). Cuối cùng chúng tôi gán cho biến Z2, giá trị của các điểm được nội dung suy ra mà trước đây chúng tôi lưu trữ trong các mảng X2 và Y2. Các dòng sau đây mô tả quá trình suy suyển nội dung.
def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
2

Với bước này, chúng tôi đã hoàn thành việc cho phép nội suy 2 chiều và do đó chúng tôi có thể rút ra kết quả để có một biểu diễn đồ họa về những thứ đã được thực hiện bởi hàm. Để hiểu rõ hơn về quá trình nội suy theo hai chiều, chúng tôi vẽ cả lưới 13 × 13 cấm đầu (trái) và 65 × 65 được nội suy (phải)

Các ô của chúng tôi sẽ hiển thị các lưới điểm và sẽ mô tả giá trị của mỗi cặp (x, y) với Tỷ lệ màu. Để đạt được kết quả như vậy, chúng ta có thể khai thác chức năng matplotlib

scipy.interpolate.interp(1D, 2D, 3D)
3 cho phép tạo ra biểu đồ giả với lưới hình chữ nhật không thường xuyên (https. //matplotlib. tổ chức/3. 1. 1/api/_as_gen/matplotlib. pyplot. pcolormesh ).  
def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
3

The end results are display in Hình 2

Hình 2. Kết quả của. Interp2d(); . Kết quả của. interp2d();

Như bạn có thể thấy trong Hình 2, thông qua quá trình nội suy 2D, chúng tôi đã dày đặc lưới đầu tiên bằng cách nội suy giá trị của các điểm bổ sung có trong phạm vi của các điểm ban đầu của lưới.

Nội suy 3D

Chúng tôi kết thúc bài viết này bằng cách cho phép nội suy cuối cùng, chúng tôi tăng kích thước và giải quyết trường hợp ba chiều. Để thực hiện nhiệm vụ này, chúng tôi khai thác hàm. Interpn(), may be used, nói chung, cho phép nội suy đa chiều trên lưới thông thường (có thể tìm thấy nhiều tài liệu hơn ở đây https. // tài liệu. scipy. org/doc/scipy/tham chiếu/được tạo/scipy. nội suy. thực tập. html);

Tương tự như các trường hợp khác, chúng tôi bắt đầu mã của mình bằng cách xác định các mảng sẽ tạo thành lưới 3D của chúng tôi, lần này chúng tôi sẽ cần ba mảng bằng nhau, được gọi là X X, Sau đó, chúng tôi . Hơn nữa, chúng tôi xác định lưới 3D, sử dụng lại ____ 41.  

def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
4

Tại các điểm này, chúng tôi phải gán một giá trị cho tất cả các điểm của (x, y, z) trên lưới;

Khi bạn có thể thấy, hàm phụ thuộc vào ba biến độc lập. Giá trị của tất cả các bộ ba (x, y, z) sẽ được lưu trữ trong các giá trị mảng, định nghĩa bằng cách gọi hàm là func_3d trên tất cả các điểm x, y, z

def find_xy(p1, p2, z):

    x1, y1, z1 = p1
    x2, y2, z2 = p2
    if z2 < z1:
        return find_xy(p2, p1, z)

    x = np.interp(z, (z1, z2), (x1, x2))
    y = np.interp(z, (z1, z2), (y1, y2))

    return x, y
5

Vì không thể vẽ đồ thị được tạo ra (nó sẽ dẫn đến một lô bốn chiều); . Trong trường hợp của chúng tôi, chúng tôi sẽ thực hiện cấp phép nội suy chỉ trên một bộ ba, được xác định trong các mảng điểm.