【发布时间】:2020-12-11 02:26:33
【问题描述】:
我正在尝试使用 python 函数的内容来制作等高线图。例如我尝试:
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
# Building my equation from a series of matrix operation
def func_M(X, Y):
z_mat = np.array([[X**2, Y],
[Y, X]])
z_other = np.array([[X],
[Y]])
z_matInv = (np.linalg.inv(z_mat))
z_final=np.dot(z_matInv,z_other)
return z_final[0][0]
# print out the return of the function evaluated at X = .1.5, and Y = 2.
print func_M(1.5,2.)
# Building and x and y grid to plot:
x = np.arange(-5, 5, 0.01)
y = np.arange(-5, 5, 0.01)
xx, yy = np.meshgrid(x, y, sparse=True)
# Making the z component and contour plotting function:
#z_plot_M = func_M(xx,yy)
#h = plt.contourf(x,y,z_plot_M)
#plt.show()
因此,print 函数打印出 2.8,这是在 x = 1.0 和 y =2.0 处计算的最终矩阵的第一个元素。
但是,如果我尝试将其评估为计数(注释位),则它不起作用。
这是我用作基础的简单代码:
x = np.arange(-5, 5, 0.01)
y = np.arange(-5, 5, 0.01)
xx, yy = np.meshgrid(x, y, sparse=True)
def func_eq(X, Y):
z = np.sin(X**2) + np.sin(Y**2)
return z
z_plot = func_eq(xx,yy)
h = plt.contourf(x,y,z_plot)
plt.show()
这是有原因的,但是当我有矩阵而不是简单的方程时,它没有?第一种情况有简单的解决方法吗?
【问题讨论】:
-
这与代码是在函数内部还是外部无关。
z_mat不是矩阵 - 它是 3 维的。你不能对不是矩阵的东西进行矩阵求逆。 -
你可以,如果我在函数外做同样的操作并且它工作正常。
-
No it doesn't. (另外,哎呀,不是 3D - 我错过了这样一个事实,即您将
xx和yy传递为X和Y。z_mat是多维锯齿状的objectdtype。) -
无论您认为
z_mat是什么,都不是。 -
我实际上是在查看一个在函数工作鳍之外的工作代码。但是,该代码运行,问题不在于计算是绘图功能。
标签: python numpy matrix array-broadcasting matrix-inverse