[英]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.