Метод Numpy.linalg.svd() используется в Python для вычисления коэффициента массива путем разложения по сингулярным значениям.
SVD матрицы A определяется произведением трех матриц: A = U * S * VT, где U и V — ортогональные матрицы, S — диагональная матрица сингулярных значений, а VT обозначает транспонирование матрицы V.
Синтаксис
|
1 |
numpy.linalg.svd(arr, full_matrices=True, compute_uv=True, hermitian=False) |
Параметры
- arr: это заданный массив, действительный или комплексный массив с размером >=2.
- full_matricesbool, необязательный. Если true(по умолчанию), no-vh имеет формы(…, M, M) и(…, N, N) соответственно. В противном случае формы — это(…, M, K) и(…, K, N) соответственно, где K = min(M, N).
- Compute_uvbool, необязательный. Следует ли вычислять u с помощью vh или нет в дополнение к s., true по умолчанию.
- hermitian(тип bool): если true, то параметр считается эрмитовым (симметричным, если действительное значение), что позволяет более эффективно находить значения единства. По умолчанию установлено значение False.
Возвращаемое значение
- u {(…, M, M),(…, M, K)} list:
Те же члены союза. Первые размеры a.ndim – 2 имеют тот же размер, что и входной параметр a. Размер последних двух измерений зависит от количества full_matrices. Восстанавливается только тогда, когда Compute_uv действителен.
- list s(…,K):
Векторы(значения) имеют единичные значения внутри каждого вектора, расположенного последовательно. Например, первые размеры a.ndim – 2 имеют тот же размер, что и входные данные a.
- vh {(…, N, N),(…, K, N)} list:
Те же члены союза. Первые размеры a.ndim – 2 имеют тот же размер, что и входной параметр a. Размер последних двух измерений зависит от количества full_matrices. Восстанавливается только тогда, когда Compute_uv действителен.
Пример 1: как использовать метод numpy.linalg.svd()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Reconstruction based on full SVD, 2D case: import numpy as np import numpy.linalg as lng arr1 = np.random.randn(7, 5) + 1j*np.random.randn(7, 5) arr2 = b = np.random.randn(2, 5, 7, 3) + 1j*np.random.randn(2, 5, 7, 3) # printing those arrays print("First array is : \n", arr1) #print("Second array is : \n",arr2) # Getting values as per retured values u, s, vh = lng.svd(arr1, full_matrices=True) # Printing all of these three types value shape print("Shape of all returned values are :\n") print("U=", u.shape) print("S=", s.shape) print("VH=", vh.shape) |
Выход
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
First array is : [[ 0.45455448-0.99400459j -2.07790704-0.34203097j 0.31526776-0.18273054j -1.67524182+0.43907347j 1.78011809-0.2821105j ] [ 0.93683452+0.0409038j 0.1947033 +0.51228072j 0.21707904-0.93347113j -0.91376091+1.93830379j 0.30129581+0.85677804j] [ 0.39894498+0.411946j -2.45609934-0.39012388j 0.06409012-0.7378022j 0.77132651-0.13284201j -0.59513831+0.59732381j] [ 0.95485456+2.23077837j -0.36013759-0.40701142j -0.32357189-1.21217558j 1.02203585-1.70533207j -0.73714513+3.04934355j] [-1.67138163-0.05336553j 0.70704034+0.2190891j 0.08695378+1.64593237j 0.50538914-0.70203225j -1.07312985-0.82621317j] [-0.79378946-1.02263156j 0.21314492-0.28866945j -0.16607773-0.07397866j -0.15963783-0.67927935j -1.41212434+0.36670438j] [ 1.29366093-1.56407697j 0.67691047-0.89822666j -0.87327097+0.50675365j 0.86874137-0.82330762j -0.554888 +0.33316536j]] Shape of all returned values are : U=(7, 7) S=(5,) VH=(5, 5) |
Пример 2
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import numpy as np # Create a numpy array arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=np.float32) print("Original array:") print(arr) # Calculate the factor U, s, V = np.linalg.svd(arr, full_matrices=False) # Print the result print("\nFactor of the given array by Singular Value Decomposition:") print("\nU=", U, "\n\ns=", s, "\n\nV=", V) |
Выход
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Original array: [[1. 2. 3.] [4. 5. 6.] [7. 8. 9.]] Factor of the given array by Singular Value Decomposition: U= [[-0.21483724 0.8872307 0.4082483 ] [-0.5205874 0.24964395 -0.8164966 ] [-0.8263375 -0.3879428 0.4082483 ]] s= [1.6848103e+01 1.0683695e+00 3.3347528e-16] V= [[-0.47967118 -0.5723678 -0.6650644 ] [-0.776691 -0.07568647 0.62531805] [-0.4082483 0.8164966 -0.4082483 ]] |
Пример 3
|
1 2 3 4 5 6 7 8 9 10 |
import numpy as np arr = np.array([[19, 21], [18, 46]], dtype=np.float32) print("Original array:") print(arr) U, s, V = np.linalg.svd(arr, full_matrices=False) print("\nFactor of the given array by Singular Value Decomposition:") print("\nU=", U, "\n\ns=", s, "\n\nV=", V) |
Выход
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Original array: [[19. 21.] [18. 46.]] Factor of the given array by Singular Value Decomposition: U= [[-0.48440805 -0.87484217] [-0.87484217 0.48440805]] s= [56.25168 8.817514] V= [[-0.4435585 -0.8962454] [-0.8962454 0.4435585]] |
