簡體   English   中英

在 Python 中繪制帶有二維向量條目的 function

[英]Plotting a function with 2D vector entry in Python

我有以下 function 到 plot:

f(x) = 3 + (x - (2  6)T )T · (x - (2  6)T)

其中(2 6)是一個向量, T表示轉置, x是一個大小為 2 的向量。我的問題是如何實現np.linspace以便獲得連續的 2D function?

我以以下形式編寫了我的 function:

def f(x):
    a = np.array([[2],[6]])
    t = lambda x: 3 + np.dot((x - (a)).T, (x - a))
    return t(x)

x = np.array([[4],[1]]) # Some random (2,1) sized vector
y = f(x) # Returns an array sized (1,1)

例如,對於 plot function f(x) = x^2 (x-squared)的變體,我可以編寫以下代碼:

def f(x):
   return x**2

x = np.linspace(-5, 5, 20)
y = f(x)
plt.plot(x, y)

我想知道對於x輸入是二維向量的情況,是否可以 plot 連續 function 。 如果不可行,第一個 function 應該如何繪制? 3-D plot 是不可能的,因為我的 function 只有x作為其參數。

Edit

你的向量的維度是 2。你也有這個向量的 function 的值。 總共你有 3 個參數,所以我認為它不能被繪制為 2D plot,你需要使用x plot。軸)

@deeenizka是對的,我們必須 plot 3 個維度。 一種方法是使用輪廓線plot。

首先,我們必須對您的 function 進行矢量化,以使用二維向量數組計算 function 的值

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    a = np.array([[2],[6]])
    x = x - a
    return 3 + np.einsum('ij,ij->j',x ,x)

要獲得輸入坐標向量,我們可以使用meshgrid並將 2D ravel傳遞給 function f

x = np.linspace(-50, 50, 100)
y = np.linspace(-50, 50, 100)

X,Y = np.meshgrid(x, y)
data = np.vstack([X.ravel(), Y.ravel()])

在我們對返回的 function 值數組進行整形后,我們可以用輪廓函數contourf數據。

plt.figure(figsize=(8,6))
plt.contourf(X, Y, f(data).reshape(X.shape), levels=20)
plt.colorbar();

出去:

你的功能輪廓

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM