Pyplot lemniscate

时间:2015-01-06 09:33:51

标签: python matplotlib geometry

我想知道是否有人知道更优雅的方式来绘制python中的lemnicate(在公式或其他好的想法方面是受欢迎的)。我从维基百科中获取了公式。但是想知道是否有可能缩短公式,以使其更好看。

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
alpha = 1

#plot a lemniskate

t = np.linspace(0, 2*np.pi, num=1000) # 10^3 points 

x = [alpha * np.sqrt(2)*np.cos(i) / (np.sin(i)**2+1) for i in t]

y = [alpha * np.sqrt(2)*np.cos(i)*np.sin(i) / (np.sin(i)**2+1) for i in t]

plt.plot(x, y)

enter image description here

1 个答案:

答案 0 :(得分:1)

Numpy数组支持“矢量化”操作。与迭代数组并从中创建列表相比,它们更快,内存效率更高。

因此,在这种情况下不需要列表理解。最好直接在t上操作。

例如:

import numpy as np
import matplotlib.pyplot as plt

alpha = 1
t = np.linspace(0, 2*np.pi, num=1000)

x = alpha * np.sqrt(2) * np.cos(t) / (np.sin(t)**2 + 1)
y = alpha * np.sqrt(2) * np.cos(t) * np.sin(t) / (np.sin(t)**2 + 1)

plt.plot(x, y)
plt.show()

此外,如果您只想要形状,而不关心绝对值,则可以省略常量:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 2*np.pi, num=1000)

x = np.cos(t) / (np.sin(t)**2 + 1)
y = np.cos(t) * np.sin(t) / (np.sin(t)**2 + 1)

plt.plot(x, y)
plt.show()

enter image description here