函数是z = (x - 1) **10 + 5*(x - 1)**5*(y - 1)**5 + (y - 1)**10
。但由于正值较大,等值线不能清晰地显示负值。
所以我只需要用对数表示正值(如果z < 0
,则为np.log(1 + 0)
),但保留负值作为原点。
我怎么能用pyplot.imshow做到这一点?
此代码不起作用:
import numpy as np
import matplotlib.pyplot as plt
def z(x, y):
z0 = (x - 1) **10 + 5*(x - 1)**5*(y - 1)**5 + (y - 1)**10
# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
return z0 if z0 < 0 else np.log(1 + z0)
def main():
x, y = np.linspace(0.0, 3.0, 300), np.linspace(0.0, 3.0, 300)
X, Y = np.meshgrid(x, y)
plt.imshow(z(X, Y), origin='lower', extent = [0, 3, 0, 3], cmap=plt.cm.hsv)
plt.colorbar()
plt.show()
if __name__ == '__main__':
main()
字符串
1条答案
按热度按时间kt06eoxx1#
问题出在代码行中:
字符串
这一行引发ValueError,因为您正在比较数组和标量。当使用NumPy数组时,我建议使用切片器:
型
切片器允许您仅更改数组中所需的元素。