繁体   English   中英

绘制numpy向量的函数

[英]Plotting a function of numpy vector

我想绘制一个numpy矩阵的函数

f = lambda X: X.T @ X

但我不确定如何进行。 我对多变量函数的方法很熟悉,与多变量函数(以及绘图)的等效函数将是

g = lambda x, y: x**2 + y**2
X, Y = np.meshgrid(
    np.linspace(start = -10, stop = 10, num = 101),
    np.linspace(start = -10, stop = 10, num = 101))
plt.plot_surface(X,Y,g(X,Y))

所以f(np.matrix((x,y))) == g(x,y) ,但是我不知道如何将其扩展到我的向量函数中。 那么如何实现呢?

假设XT @ X含义是numpy.dot(XT,X) ,您可以像绘制其他任何函数一样直接绘制结果。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

f = lambda X: np.dot(X.T,X)

fig = plt.figure()
ax = plt.subplot(projection="3d")

X, Y = np.meshgrid(
    np.linspace(start = -10, stop = 10, num = 101),
    np.linspace(start = -10, stop = 10, num = 101))
ax.plot_surface(X,Y,f(X))

plt.show()

在此处输入图片说明

但是,为了从问题中获得所需的输出,该函数同时取决于x和y,因此可能需要的是

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

f = lambda xi,yi: np.dot(np.dot([xi,yi],np.identity(2)),[[xi],[yi]])

fig = plt.figure()
ax = plt.subplot(projection="3d")

X, Y = np.meshgrid(
    np.linspace(start = -10, stop = 10, num = 101),
    np.linspace(start = -10, stop = 10, num = 101))

Z = np.vectorize(f)(X,Y)
ax.plot_surface(X,Y,Z)

plt.show()

在此处输入图片说明

这里的问题是安排尺寸。 您的f似乎期望X和Y被转换为向量的集合。 但是X和Y是两个101x101矩阵。 因此,需要进行一些重新排列和按摩。 好消息是,使用下面的map命令可以对任何功能进行操作。 坏消息-效率是优雅可能不是最佳的。

这是我会尝试的:

Z = map(f, np.array([X.ravel(), Y.ravel()]).T)
Z = np.array(list(Z)).reshape(X.shape)

接着

ax.plot_surface(X,Y,Z)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM