首先,请注意,您的函数在第一次运行时不会返回任何内容if
-测试是False
。你需要一个else
部分用于if x in I.open(0, 1):
.
现在,您想在矢量化的(numpy)方式。 Pythonif
-测试不能这样使用。经常,np.where可以用它代替。
目前还不清楚在哪里I.open()
来自。您的代码缺少必要的导入。假设它代表开区间]0,1[
,该函数可以写成向量化形式:
import numpy as np
def f(x, y):
return np.where((x > 0) & (x < 1) & (y > 0) & (y < 1), # condition
x + y, # result of the if clause
0) # result of the else clause
注意&
用于矢量化版本logical AND (|
将是logical OR)。由于 Python 运算符的重载,通常比编写标准表达式时需要更多的括号。
使用数组作为输入,矢量化负责分别为每个元素执行函数。
下面是一些使用更多点绘制结果的示例代码:
import matplotlib.pyplot as plt
import numpy as np
def f(x, y):
return np.where((x > 0) & (x < 1) & (y > 0) & (y < 1), # condition
x + y, # result of the if clause
0) # result of the else clause
X1d = np.linspace(-5, 5, 100)
Y1d = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(X1d, Y1d)
Z = f(X, Y)
plt.imshow(Z, extent=[X1d[0], X1d[-1], Y1d[0], Y1d[-1]], interpolation='nearest')
plt.xticks(range(-5, 6))
plt.yticks(range(-5, 6))
plt.grid(True, ls=':', color='white')
plt.colorbar()
plt.show()