Python Forum
Simplifying a rather short code
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Simplifying a rather short code
#1
The code below represents plotting the real and imaginary part of a complex number, given by the function r*np.exp(x*1j), where r and x are fixed in the interval [1/10,1] and [0,2*pi] respectively. Is there a way to shorten the code below?
 
f1=lambda x: 1/10*np.exp(x*1j)
f2=lambda x: 2/10*np.exp(x*1j)
f3=lambda x: 3/10*np.exp(x*1j)
f4=lambda x: 4/10*np.exp(x*1j)
f5=lambda x: 5/10*np.exp(x*1j)
f6=lambda x: 6/10*np.exp(x*1j)
f7=lambda x: 7/10*np.exp(x*1j)
f8=lambda x: 8/10*np.exp(x*1j)
f9=lambda x: 9/10*np.exp(x*1j)
f10=lambda x: 1*np.exp(x*1j)
circle_01=[[f1(n).real for n in np.linspace(0,2*np.pi,1000)],[f1(n).imag for n in np.linspace(0,2*np.pi,1000)]]
circle_02=[[f2(n).real for n in np.linspace(0,2*np.pi,1000)],[f2(n).imag for n in np.linspace(0,2*np.pi,1000)]]
circle_03=[[f3(n).real for n in np.linspace(0,2*np.pi,1000)],[f3(n).imag for n in np.linspace(0,2*np.pi,1000)]]
circle_04=[[f4(n).real for n in np.linspace(0,2*np.pi,1000)],[f4(n).imag for n in np.linspace(0,2*np.pi,1000)]]
circle_05=[[f5(n).real for n in np.linspace(0,2*np.pi,1000)],[f5(n).imag for n in np.linspace(0,2*np.pi,1000)]]
circle_06=[[f6(n).real for n in np.linspace(0,2*np.pi,1000)],[f6(n).imag for n in np.linspace(0,2*np.pi,1000)]]
circle_07=[[f7(n).real for n in np.linspace(0,2*np.pi,1000)],[f7(n).imag for n in np.linspace(0,2*np.pi,1000)]]
circle_08=[[f8(n).real for n in np.linspace(0,2*np.pi,1000)],[f8(n).imag for n in np.linspace(0,2*np.pi,1000)]]
circle_09=[[f9(n).real for n in np.linspace(0,2*np.pi,1000)],[f9(n).imag for n in np.linspace(0,2*np.pi,1000)]]
circle_10=[[f10(n).real for n in np.linspace(0,2*np.pi,1000)],[f10(n).imag for n in np.linspace(0,2*np.pi,1000)]]
plt.plot(*circle_01,*circle_02,*circle_03,*circle_04,*circle_05,*circle_06,*circle_07,*circle_08, *circle_09,*circle_10)
plt.show()
Reply
#2
Instead of 10 functions, I'd just have one. Then just have one variable full of all the circles.
def f(num, x):
    return (num/10) * np.exp(x*1j)

circles = []
for i in range(1, 11):
    circles.append([
        [f(i, n).real for n in np.linspace(0,2*np.pi,1000)],
        [f(i, n).imag for n in np.linspace(0,2*np.pi,1000)]
    ])

for circ in circles:
    plt.plot(*circ)

plt.show()
Or, you can skip the intermediary variable(s):
for i in range(1, 11):
    plt.plot(
        [f(i, n).real for n in np.linspace(0,2*np.pi,1000)],
        [f(i, n).imag for n in np.linspace(0,2*np.pi,1000)]
    )
plt.show()
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Help with simplifying the tie function blacklight 2 2,095 Jul-01-2020, 02:49 PM
Last Post: deanhystad
  Simplifying a short code schniefen 4 2,586 Apr-18-2019, 10:50 PM
Last Post: schniefen

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020