Hướng dẫn complex in python example

In my Python script for the line

Nội dung chính

  • 1. Ví dụ nhanh về Gốc vuông Python NumPy
  • 2. Cú pháp Python NumPy Square Root
  • 2.1 Các tham số của sqrt ()
  • 2.2 Giá trị trả về của sqrt ()
  • 3. Cách sử dụng Hàm Gốc vuông NumPy
  • 4. Nhận nhiều giá trị căn bậc hai của mảng NumPy
  • 5. Nhận gốc hình vuông của các số phức
  • 6. Nhận gốc vuông của các giá trị tiêu cực và vô hạn
  • 7. Lấy căn bậc hai của Mảng NumPy với Giá trị Float
  • 8. Nhận gốc vuông của giá trị mảng 2-D NumPy
  • 9. Kết luận
  • Bạn cũng có thể thích
  • Người giới thiệu

result = sp.solve(eqn)

I get the following output in the format similar to

result = 0.0100503358535014*I

I gather this means the solution is a complex number. So in this case it could also be seen as result = 0.01j.

I want to add formatting to my code to change result = 0.0100503358535014*I to something more like result = 0.01j. However I am finding issues trying to do this as I was trying to use isinstance to check if result was complex

if isinstance(result, complex):
        print "Result is complex!"
        ... my code here...

However this loop is never entered (i.e 0.0100503358535014*I isn't classified as complex here).

What way should I write an if statement to check if result is given in the manner xxxxxxx*I correctly?

Josh Lee

164k37 gold badges266 silver badges271 bronze badges

asked Mar 14, 2017 at 16:08

6

SymPy supports Python's built-in function complex():

>>> import sympy
>>> x = sympy.sqrt(-2)
>>> x
sqrt(2)*I
>>> complex(x)
1.4142135623730951j

There are some examples in http://docs.sympy.org/latest/modules/evalf.html

A Python complex number can be formatted similar to a float:

>>> format(complex(x), 'e')
'0.000000e+00+1.414214e+00j'
>>> format(complex(x), 'f')
'0.000000+1.414214j'
>>> format(complex(x), 'g')
'0+1.41421j'

If you want to format the real and imag parts separately you can do it yourself.

The conversion would raise a TypeError if it can't be done:

>>> complex(sympy.Symbol('x'))
Traceback (most recent call last):
TypeError: can't convert expression to float

answered Mar 14, 2017 at 16:34

Josh LeeJosh Lee

164k37 gold badges266 silver badges271 bronze badges

Here's an alternative which incidentally indicates how to check whether one or both parts of a complex number are available.

>>> from sympy import *
>>> var('x')
x
>>> expr = (x+0.012345678*I)*(x-0.2346678934)*(x-(3-2.67893455*I))
>>> solve(expr)
[0.234667893400000, -0.012345678*I, 3.0 - 2.67893455*I]
>>> roots = solve(expr)
>>> for root in roots:
...     r, i = root.as_real_imag()
...     '%10.3f %10.3f i' % (r,i)
...     
'     0.235      0.000 i'
'     0.000     -0.012 i'
'     3.000     -2.679 i'

You could check the sign of the complex part to decide whether to put a plus sign in. I would like to have been able to use the newfangled formatting but fell afoul of the bug which comes with Py3.4+ mentioned in Python TypeError: non-empty format string passed to object.__format__ for which I have no remedy.

answered Mar 14, 2017 at 18:09

Hướng dẫn complex in python example

Bill BellBill Bell

20.4k5 gold badges42 silver badges57 bronze badges

The following checks whether the sympy object result represents a complex number and truncates the float value to 2 decimal points.

import sympy as sp

result = 0.0100503358535014*sp.I
print(result.is_complex)
print(sp.N(result,2))
True
0.01*I

answered Mar 14, 2017 at 16:21

SteliosStelios

4,9831 gold badge15 silver badges31 bronze badges

2

I have run across some confusing behaviour with square roots of complex numbers in python. Running this code:

Nội dung chính

  • 1. Ví dụ nhanh về Gốc vuông Python NumPy
  • 2. Cú pháp Python NumPy Square Root
  • 2.1 Các tham số của sqrt ()
  • 2.2 Giá trị trả về của sqrt ()
  • 3. Cách sử dụng Hàm Gốc vuông NumPy
  • 4. Nhận nhiều giá trị căn bậc hai của mảng NumPy
  • 5. Nhận gốc hình vuông của các số phức
  • 6. Nhận gốc vuông của các giá trị tiêu cực và vô hạn
  • 7. Lấy căn bậc hai của Mảng NumPy với Giá trị Float
  • 8. Nhận gốc vuông của giá trị mảng 2-D NumPy
  • 9. Kết luận
  • Bạn cũng có thể thích
  • Người giới thiệu
from cmath import sqrt
a = 0.2
b = 0.2 + 0j
print(sqrt(a / (a - 1)))
print(sqrt(b / (b - 1)))

gives the output

0.5j
-0.5j

A similar thing happens with

print(sqrt(-1 * b))
print(sqrt(-b))

It appears these pairs of statements should give the same answer?

asked Apr 12, 2016 at 21:32

5

Both answers (+0.5j and -0.5j) are correct, since they are complex conjugates -- i.e. the real part is identical, and the imaginary part is sign-flipped.

Looking at the code makes the behavior clear - the imaginary part of the result always has the same sign as the imaginary part of the input, as seen in lines 790 and 793:

r.imag = copysign(d, z.imag);

Since a/(a-1) is 0.25 which is implicitly 0.25+0j you get a positive result; b/(b-1) produces 0.25-0j (for some reason; not sure why it doesn't result in 0.25+0j tbh) so your result is similarly negative.

EDIT: This question has some useful discussion on the same issue.

answered Apr 12, 2016 at 22:03

tzamantzaman

45.2k11 gold badges88 silver badges112 bronze badges

5

I can answer why this is happening, but not why the behavior was chosen.

a/(a - 1)

evaluates to 0.2/-0.8 which is -0.25, which is converted to a complex number by cmath.sqrt, while

b/(b - 1)

evaluates to (0.2+0j)/(-0.8+0j) which is (-0.25-0j), which is converted to a complex number with a negative complex component.

For a simpler example,

cmath.sqrt(0j) == 0j
cmath.sqrt(-0j) == -0j

answered Apr 12, 2016 at 22:03

Matt JordanMatt Jordan

2,1258 silver badges10 bronze badges

Python numpy.sqrt() được sử dụng để trả về căn bậc hai không âm của một phần tử mảng (cho mỗi phần tử của mảng). Trong bài viết này, tôi sẽ giải thích cách sử dụng căn bậc hai Numpy bằng cách sử dụng numpy.sqrt() các ví dụ.

Nội dung chính

  • 1. Ví dụ nhanh về Gốc vuông Python NumPy
  • 2. Cú pháp Python NumPy Square Root
  • 2.1 Các tham số của sqrt ()
  • 2.2 Giá trị trả về của sqrt ()
  • 3. Cách sử dụng Hàm Gốc vuông NumPy
  • 4. Nhận nhiều giá trị căn bậc hai của mảng NumPy
  • 5. Nhận gốc hình vuông của các số phức
  • 6. Nhận gốc vuông của các giá trị tiêu cực và vô hạn
  • 7. Lấy căn bậc hai của Mảng NumPy với Giá trị Float
  • 8. Nhận gốc vuông của giá trị mảng 2-D NumPy
  • 9. Kết luận
  • Bạn cũng có thể thích
  • Người giới thiệu

Nội dung chính

  • 1. Ví dụ nhanh về Gốc vuông Python NumPy
  • 2. Cú pháp Python NumPy Square Root
  • 2.1 Các tham số của sqrt ()
  • 2.2 Giá trị trả về của sqrt ()
  • 3. Cách sử dụng Hàm Gốc vuông NumPy
  • 4. Nhận nhiều giá trị căn bậc hai của mảng NumPy
  • 5. Nhận gốc hình vuông của các số phức
  • 6. Nhận gốc vuông của các giá trị tiêu cực và vô hạn
  • 7. Lấy căn bậc hai của Mảng NumPy với Giá trị Float
  • 8. Nhận gốc vuông của giá trị mảng 2-D NumPy
  • 9. Kết luận
  • Bạn cũng có thể thích
  • Người giới thiệu

Nội dung chính

  • 1. Ví dụ nhanh về Gốc vuông Python NumPy
  • 2. Cú pháp Python NumPy Square Root
  • 2.1 Các tham số của sqrt ()
  • 2.2 Giá trị trả về của sqrt ()
  • 3. Cách sử dụng Hàm Gốc vuông NumPy
  • 4. Nhận nhiều giá trị căn bậc hai của mảng NumPy
  • 5. Nhận gốc hình vuông của các số phức
  • 6. Nhận gốc vuông của các giá trị tiêu cực và vô hạn
  • 7. Lấy căn bậc hai của Mảng NumPy với Giá trị Float
  • 8. Nhận gốc vuông của giá trị mảng 2-D NumPy
  • 9. Kết luận
  • Bạn cũng có thể thích
  • Người giới thiệu

Nội dung chính

  • 1. Ví dụ nhanh về Gốc vuông Python NumPy
  • 2. Cú pháp Python NumPy Square Root
  • 2.1 Các tham số của sqrt ()
  • 2.2 Giá trị trả về của sqrt ()
  • 3. Cách sử dụng Hàm Gốc vuông NumPy
  • 4. Nhận nhiều giá trị căn bậc hai của mảng NumPy
  • 5. Nhận gốc hình vuông của các số phức
  • 6. Nhận gốc vuông của các giá trị tiêu cực và vô hạn
  • 7. Lấy căn bậc hai của Mảng NumPy với Giá trị Float
  • 8. Nhận gốc vuông của giá trị mảng 2-D NumPy
  • 9. Kết luận
  • Bạn cũng có thể thích
  • Người giới thiệu

Nội dung chính

  • 1. Ví dụ nhanh về Gốc vuông Python NumPy
  • 2. Cú pháp Python NumPy Square Root
  • 2.1 Các tham số của sqrt ()
  • 2.2 Giá trị trả về của sqrt ()
  • 3. Cách sử dụng Hàm Gốc vuông NumPy
  • 4. Nhận nhiều giá trị căn bậc hai của mảng NumPy
  • 5. Nhận gốc hình vuông của các số phức
  • 6. Nhận gốc vuông của các giá trị tiêu cực và vô hạn
  • 7. Lấy căn bậc hai của Mảng NumPy với Giá trị Float
  • 8. Nhận gốc vuông của giá trị mảng 2-D NumPy
  • 9. Kết luận
  • Bạn cũng có thể thích
  • Người giới thiệu
  • 1. Ví dụ nhanh về Gốc vuông Python NumPy
  • 2. Cú pháp Python NumPy Square Root
    • 2.1 Các tham số của sqrt ()
    • 2.2 Giá trị trả về của sqrt ()
  • 3. Cách sử dụng Hàm Gốc vuông NumPy
  • 4. Nhận nhiều giá trị căn bậc hai của mảng NumPy
  • 5. Nhận gốc hình vuông của các số phức
  • 6. Nhận gốc vuông của các giá trị tiêu cực và vô hạn
  • 7. Lấy căn bậc hai của Mảng NumPy với Giá trị Float
  • 8. Nhận gốc vuông của giá trị mảng 2-D NumPy
  • 9. Kết luận
    • Bạn cũng có thể thích
    • Người giới thiệu

1. Ví dụ nhanh về Gốc vuông Python NumPy

Nếu bạn đang vội, dưới đây là một số ví dụ nhanh về cách sử dụng hàm căn bậc hai Python NumPy.


# Below are a quick examples

# Example 1: numpy.sqrt() of single element
arr2 = np.sqrt(45)

# Example 2: Use numpy.sqrt() function to square root of numbers
arr = [25, 49, 225, 64, 81, 16]
arr2 = np.sqrt(arr)

# Example 3: Use numpy.sqrt() function with complex numbers
arr = [2+6j, -5-8j, 4-5j, 3+4j]
arr2 = np.sqrt(arr)

# Example 4: Use numpy.sqrt() function with negative and inifite as input values
arr = [-6, np.inf, 25, -15, np.inf]
arr2 = np.sqrt(arr)

# Example 5: Use numpy.sqrt() function to floating-point array
arr = [4.3, 8.5, 15.1, 23.7, 14.2, 7.8]
arr2 = np.sqrt(arr)

# Example 6: Use numpy.sqrt() function to square root from multiple array
arr = np.array([[25, 64, 9, 16], [9, 4, 49, 36]])
arr2 = np.sqrt(arr)

2. Cú pháp Python NumPy Square Root

Sau đây là cú pháp của numpy.sqrt().


# Syntax of python numpy.sqrt() 
numpy.sqrt(arr, out=None, where=True, casting='same_kind', order="K", dtype=None)

2.1 Các tham số của sqrt ()

  • arr – Các giá trị có căn bậc hai là bắt buộc. Đầu vào mảng.
  • out – Nó là ndarray, None, hoặc bộ ba của ndarray và None, tùy chọn. Out sẽ là nơi lưu trữ kết quả. Nếu được cung cấp, nó phải có hình dạng mà các đầu vào phát tới. Nếu không được cung cấp hoặc Không có, một mảng mới được cấp phát sẽ được trả về.
  • where – Nó là array_like, tùy chọn. Điều kiện này được phát qua đầu vào.

2.2 Giá trị trả về của sqrt ()

Return: Nó trả về một mảng căn bậc hai của số trong mảng đầu vào.

3. Cách sử dụng Hàm Gốc vuông NumPy

Bạn có thể lấy căn bậc hai của phần tử đơn lẻ của một mảng bằng cách sử dụng numpy.sqrt(). Bạn cũng có thể lấy các giá trị bình phương của mảng NumPy bằng cách sử dụng numpy.square().


import numpy as np

# Create a single element
arr = np.array(25)

# Use numpy.sqrt() function to get single element
arr2 = np.sqrt(arr)
print(arr2)

# Output:
[5.0]

# get single element square root value
arr2 = np.sqrt(45)
print(arr2)

# Output :
# 6.708203932499369

4. Nhận nhiều giá trị căn bậc hai của mảng NumPy

Để khởi tạo mảng với danh sách các số, hãy sử dụng numpy.array() và tính căn bậc hai của những số này bằng cách sử dụng numpy.sqrt(). Ví dụ,


# Create an input array
arr =np.array([25, 49, 225, 64, 81, 16])

# Use numpy.sqrt() function to square root of numbers
arr2 = np.sqrt(arr)
print(arr2)

# Output
# [ 5.  7. 15.  8.  9.  4.]

5. Nhận gốc hình vuông của các số phức

Bạn có thể sử dụng số phức làm phần tử của mảng để tính căn bậc hai của các phần tử này bằng cách sử dụng numpy.sqrt(). Ví dụ,


# Create an input array
arr =np.array( [2+6j, -5-8j, 4-5j, 3+4j])

# Use numpy.sqrt() function with complex numbers
arr2 = np.sqrt(arr)
print(arr2)

# Output
# [2.04016609+1.47046852j 1.4889562 -2.68644571j 2.28069334-1.09615789j  2.+1.j ]

6. Nhận gốc vuông của các giá trị tiêu cực và vô hạn

Sử dụng numpy.sqrt() bạn cũng có thể tính căn bậc hai của giá trị âm và Vô hạn dưới dạng giá trị đầu vào của một mảng. Căn bậc hai của ma trận có số âm sẽ ném RuntimeWarning và căn bậc hai của phần tử được trả về là nan kết quả là.


# Create an 1D input array
arr =np.array[-6, np.inf, 25, -15, np.inf]

# Use numpy.sqrt() function with negative and infinite 
arr2 = np.sqrt(arr)
print(arr2)

# Output
# [nan inf  5. nan inf]
# RuntimeWarning: invalid value encountered in sqrt

7. Lấy căn bậc hai của Mảng NumPy với Giá trị Float

Bạn có thể tìm căn bậc hai của các giá trị float của các phần tử mảng bằng cách sử dụng numpy.sqrt().


# Create an 1D input array
arr = np.array( [4.3, 8.5, 15.1, 23.7, 14.2, 7.8])

# Use numpy.sqrt() function to floating-point array
arr2 = np.sqrt(arr)
print(arr2)

# Output
# [2.07364414 2.91547595 3.88587185 4.86826458 3.76828874 2.79284801]

8. Nhận gốc vuông của giá trị mảng 2-D NumPy

Hãy tính các căn bậc hai 2-D giá trị mảng NumPy bằng cách sử dụng numpy.sqrt().


# Create an 2D input array
arr = np.array([[25, 64, 9, 16], [9, 4, 49, 36]])

# Use numpy.sqrt() function to get the 
# square root values of 2-d array
arr2 = np.sqrt(arr)
print(arr2)

# Output
# [[5. 8. 3. 4.]
# [3. 2. 7. 6.]]

9. Kết luận

Trong bài viết này, tôi đã giải thích cách sử dụng Python numpy.sqrt() để tính căn bậc hai của mọi phần tử trong mảng đã cho với các ví dụ.

Học vui vẻ !!

Bạn cũng có thể thích

Người giới thiệu