Построение кривой бабочки с использованием Python - PullRequest
1 голос
/ 14 января 2020

Я пытался построить кривую бабочки с python, и это мой код.

import math
r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r
r_of_theta=math.exp(np.sin(theta))-2*np.cos(4*theta)+sin((2*theta-np.pi)/24)**5
t_of_theta.astype(int)
ax = plt.subplot(projection='polar')
ax.plot(theta,t,color='blue')
ax.set_rticks([0.5, 1, 1.5, 2]) 
ax.set_rlabel_position(-22.5)
plt.show()

Но я продолжаю получать эту ошибку

TypeError                                 Traceback (most recent call last)
<ipython-input-66-876098af4358> in <module>()
      2 r = np.arange(0, 2, 0.01)
      3 theta = 2 * np.pi * r
----> 4 r_of_theta=math.exp(np.sin(theta))-2*np.cos(4*theta)+sin((2*theta-np.pi)/24)**5
      5 t_of_theta.astype(int)
      6 ax = plt.subplot(projection='polar')

TypeError: only size-1 arrays can be converted to Python scalars

Может кто-нибудь помочь мне вне? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 14 января 2020

Слушай, у тебя была пара опечаток. Вы должны использовать np. везде.

import numpy as np
import matplotlib.pyplot as plt

r = np.arange(0, 2, 0.01)

theta = 2 * np.pi * r
r_of_theta = []
r_of_theta = np.exp(np.sin(theta[:]))-2*np.cos(4*theta[:])+np.sin((2*theta[:]-np.pi)/24)**5
r_of_theta.astype(int)

ax = plt.subplot(projection='polar')
ax.plot(r_of_theta,color='blue')
ax.set_rticks([0.5, 1, 1.5, 2]) 
ax.set_rlabel_position(-22.5)
plt.show()
1 голос
/ 14 января 2020

math.exp работает с одним значением, и вы присваиваете ему массив. Вы можете векторизовать функцию, используя np.vectorize, однако:

import math
r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r
vec_exp = np.vectorize(math.exp)
r_of_theta=vec_exp(np.sin(theta))-2*np.cos(4*theta)+np.sin((2*theta-np.pi)/24)**5

Теперь ваш код будет работать, по крайней мере, до этой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...