目的:为x计算一些二元多项式,例如f(x,y)=sin(x^2+y^2)∈ [-1,1]和y∈ [-1,1]并将值固定在数据帧中
我所拥有的
def sunbrero(x,y):
return np.sin(x**2 + y**2)
lower=-1
upper=1
length=1000
X = np.linspace(lower, upper, num=length)
Y = np.linspace(lower, upper, num=length)
Z = pd.DataFrame(index=X,columns=Y)
# [[sunbrero(x,y) for x in X] for y in Y]
for y in Y:
Z[y] = [sunbrero(x,y) for x in X]
我希望做的是取代
for y in Y:
Z[y] = [sunbrero(x,y) for x in X]
…有点像
[[Z[y] = sunbrero(x,y) for x in X] for y in Y]
但显然,上述方法不起作用
我知道这是有效的
Z = [[sunbrero(x,y) for x in X] for y in Y]
…但它创建的是列表列表,而不是数据帧
注1:如果其他人认为2D向量更适合c.f数据帧,我也愿意接受
注2:我认为lambda函数不起作用,因为它只允许定义一个变量。很高兴被纠正
我认为更像熊猫式的方法是先计算值,然后将它们放入数据帧中,而不是反过来。在列表理解中执行计算并不能很好地利用Numpy和Pandas的内部向量优化
相反,您可以利用Numpy的广播功能首先获取矩阵:
并将其放入数据框中,如下所示:
你就快到了:
您可以理解列表,然后让pandas从列表创建数据框,例如:
得到
相关问题 更多 >
编程相关推荐