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