我现在正在学习SciPy
,我想玩一点pylab
和matplotlib
,所以作为一个练习,我试着想象Reddit
的hot
function。你知道吗
当然,这个代码不起作用,我真的不知道如何谷歌我想要什么。你知道吗
from pylab import *
import numpy as np
def f(t,v):
y = lambda a : 1 if a > 0 else (-1 if a < 0 else 0)
z = lambda a : log10(abs(a)) if abs(a) >= 1 else log10(1)
return map(z,v)*map(y,v) + t
n = 256
x = np.linspace(0,100,n)
y = np.linspace(-50,+50,n)
X,Y = np.meshgrid(x,y)
contourf(X, Y, f(X,Y), 15, alpha=.75, cmap='jet')
C = contour(X, Y, f(X,Y), 15, colors='black', linewidth=.5)
show()
编辑:如果不工作,则意味着它将给我以下错误消息:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-33-a1d2f439ebda> in <module>()
13 X,Y = np.meshgrid(x,y)
14
---> 15 contourf(X, Y, f(X,Y), 15, alpha=.75, cmap='jet')
16 C = contour(X, Y, f(X,Y), 15, colors='black', linewidth=.5)
17 show()
<ipython-input-33-a1d2f439ebda> in f(t, v)
6 z = lambda a : log10(abs(a)) if abs(a) >= 1 else log10(1)
7
----> 8 return map(z,v)*map(y,v) + t
9
10 n = 256
<ipython-input-33-a1d2f439ebda> in <lambda>(a)
4 y = lambda a : 1 if a > 0 else (-1 if a < 0 else 0)
5
----> 6 z = lambda a : log10(abs(a)) if abs(a) >= 1 else log10(1)
7
8 return map(z,v)*map(y,v) + t
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
错误来自于
if a > 0
,因为错误说明a
的真值是不明确的,它将是一个NumPy数组。你知道吗为什么
a
是NumPy数组而不是单个条目?Python的map
不会迭代数组的每个元素,它只会迭代一维,而您的输入是多维的:您可以使用^{} 而不是
map
,这将根据您的需要工作,但是您确实应该在NumPy数组上使用矢量化的NumPy函数,其中迭代将由快速本机代码处理。以下是如何以这种方式编写代码:推荐阅读:
我还建议不要使用
pylab
,而是显式导入所需的模块。e、 在这里你可以做import matplotlib.pyplot as plt
,使用plt.contour
和plt.show()
。见Pylab discussion here和here。你知道吗相关问题 更多 >
编程相关推荐