所以我有一个方程可以说:x^2 + y^2
当前,我可以创建一个数组,用于定义方程式,根据输入参数计算数组并打印出数组:
def equation(x,y):
return x**2 + y**2
def calculate(x, y, xmin, ymin):
out = []
for i in range(x_min, xs):
row = []
for j in range(y_min, ys):
row.append(equation(i, j))
out.append(row)
return out
输出数组根据指标计算值
输出,使(0,0)
位于左上方。给定具有长度和宽度的数组,如何计算方程式,以使(0,0)
居中并遵循笛卡尔平面?
答案 0 :(得分:0)
要使数据围绕0、0、0居中并绘制结果,可以执行以下操作:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def equation(x,y):
return x**2 + y**2
x = [(i-50)/10 for i in range(0,100,1)]
y = x
z = [equation(i, j) for i, j in zip(x, y)]
# plot the function
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.scatter(x, y, z, c='r', marker='o')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# rotate the plot so we can see the 3 dimensions
for angle in range(0, 360):
ax.view_init(30, angle)
plt.draw()
plt.pause(.001)
结果:
答案 1 :(得分:0)
基本上,您只需要重新定义要迭代的内容,即可将(0, 0)
放在中间。我建议您尽管使用numpy之类的库,并利用矢量化函数来加快(并简化)代码。例如:
import numpy as np
x = np.linspace(-1, 1, 11) # create 11 points arranged from -1 to 1
X, Y = np.meshgrid(x, x) # this produces the input values you'd get out of your double loop
result = np.square(X) + np.square(Y) # your equation, applied to everything at once
我做了一个奇数个以0为中心的点,因此我们实际上将在中心有一个(0, 0)
输入值。我们可以使用以下内容绘制结果:
from matplotlib import pyplot as plt
plt.imshow(result)
请注意,此处的轴刻度是错误的,因为imshow
不在乎我们的原始输入是什么,但是中间的黑点是您的(0, 0)
输入点。