numpy 使用meshgrid和imshow打印

xmd2e60i  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(101)

Imshow和meshgrid并不像我想象的那样工作。我为2D中的给定(x,y)点定义了一些函数,该函数返回标量f(x,y)。我想用imshow可视化函数f。

x = np.linspace(0,4)
y = np.linspace(0,1)

X,Y = np.meshgrid(x,y)
Z = np.zeros((50,50))

for i in range(50):
   for j in range(50):
       Z[i,j] = f(X[i,j],Y[i,j])

fig = plt.figure()
plt.imshow(Z,extent=[0,4,1,0])
plt.show()

字符串
这和预期的一样,除了我认为它应该是[0,4,0,1]...我是否对每个(x,y)对定义了Z[i,j]不正确?解释一下这是如何工作的将是伟大的!谢谢你,谢谢

46scxncf

46scxncf1#

据我所知,imshow通常用于显示图像。然后使用该范围来定义其大小,例如,您可能希望给予一个图像作为打印的背景。
相反,我认为您会发现使用pcolor(此处为演示)更直观。它的工作原理与imshow大致相同,因此您只需提供Z即可。但是,您也可以将XY数组给予它。通过这种方式,您可以真正检查是否正确提供了值:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,4)
y = np.linspace(0,1)

def f(x, y):
    return y * np.sin(x) 

X, Y = np.meshgrid(x,y)
Z = np.zeros((50,50))

for i in range(50):
   for j in range(50):
       Z[i,j] = f(X[i,j],Y[i,j])

plt.pcolor(X, Y, Z)
plt.show()

字符串
我已经添加了一个函数来显示它的工作。请注意,如果您的函数能够处理numpy数组,则可以将Z的初始化和嵌套的for循环替换为

X, Y = np.meshgrid(x,y)
Z = f(X, Y)


这样更干净,计算速度也更快。

相关问题