1. 程式人生 > >Numpy入門學習之(二)linalg庫----向量範數、矩陣範數、行列式、矩陣逆、冪

Numpy入門學習之(二)linalg庫----向量範數、矩陣範數、行列式、矩陣逆、冪

老師課堂總結,請勿轉載

Numpy中的核心線性代數工具

numpy.linalg模組包含線性代數的函式。使用這個模組,我們可以計算逆矩陣、求特徵值、解線性方程組以及求解行列式等。

求解矩陣的範數

在實數域中,數的大小和兩個數之間的距離是通過絕對值來度量 的。在解析幾何中,向量的大小和兩個向量之差的大小是 “長度 ” 和 “ 距 離 ”的概念來度量的。為了對矩陣運算進行數值分析,我們需要對向量 和矩陣的 “大小 ”引進某種度量。範數是絕對值概念的自然推廣。

"範數 "是對向量和矩陣的一種度量,實際上是二維和三維 向量長度概念的一種推廣.

向量範數


範數理論的一個小推論告訴我們:ℓ1≥ℓ2≥ℓ∞


矩陣的範數


範數彙總

轉載地址http://blog.csdn.net/u011361880/article/details/73527229


矩陣行列式


方陣的逆矩陣




伴隨矩陣


逆矩陣運算性質


程式碼

# -*- coding: utf-8 -*-
"""
Created on Sat Jul 29 15:33:39 2017

@author: Administrator
"""

import numpy as np

print("###########向量範數#########")
print("向量為:",[1,5,6,3,-1])
print("1範數:",np.linalg.norm([1,5,6,3,-1],ord = 1),"向量元素絕對值之和")
print("2範數:",np.linalg.norm([1,5,6,3,-1],ord = 2),"向量元素絕對值的平方和再開方")
print("無窮範數:",np.linalg.norm([1,5,6,3,-1],ord = np.inf),"所有向量元素絕對值中的最大值")

print("###########矩陣範數#########")
a = np.arange(12).reshape(3,4)
print("矩陣a為:")
print(a)
print("F範數",np.linalg.norm(a,ord = 'fro'),"矩陣元素絕對值的平方和再開平方")
print("1範數",np.linalg.norm(a,ord = 1),"列和範數,即所有矩陣列向量絕對值之和的最大值")
print("2範數",np.linalg.norm(a,ord = 2),"譜範數,即ATA矩陣的最大特徵值的開平方")
print("無窮範數",np.linalg.norm(a,ord = np.inf),"行和範數,即所有矩陣行向量絕對值之和的最大值")


print("###########行列式#########")
a = np.arange(1,17).reshape(4,-1)
print("矩陣a為")
print(a)
print("a的行列式為:",np.linalg.det(a))

print("###########逆矩陣np.linalg.inv()#########")
a = np.array([[1,-1],[1,1]])
b = np.array([[1/2,1/2],[-1/2,1/2]])
print("矩陣相乘為單位矩陣E:")
print(np.dot(a,b))

print("###########伴隨矩陣#########")
print(a)
det_a = np.linalg.det(a)
print("a的行列式為:",det_a)
inv_a = np.linalg.inv(a)####求a的逆矩陣
print("a的逆矩陣為:",inv_a)
print("a的伴隨矩陣為:")
bansui = det_a*inv_a
print(bansui)
print("驗證:",np.dot(bansui,a))

print("###########A與A逆行列式#########")
a = np.random.rand(5,5)
inv_a = np.linalg.inv(a)
det_a = np.linalg.det(a)
det_inv_a = np.linalg.det(inv_a)
print(det_a*det_inv_a)

print("###########矩陣的冪matrix_power()#########")
a = np.random.rand(3,3)
print(a)
print(np.linalg.matrix_power(a,2))

print("###########求解AXB=C?#########")
a = np.array([[1,2,3],[2,2,1],[3,4,3]])
b = np.array([[2,1],[5,3]])
c = np.array([[1,3],[2,0],[3,1]])
det_a = np.linalg.det(a)
det_b = np.linalg.det(b)
inv_a = np.linalg.inv(a)
inv_b = np.linalg.inv(b)
if det_a != 0:
    if det_b !=0:
        x = np.dot(np.dot(inv_a,c),inv_b)
        print(x)
###########向量範數#########
向量為: [1, 5, 6, 3, -1]
1範數: 16.0 向量元素絕對值之和
2範數: 8.48528137424 向量元素絕對值的平方和再開方
無窮範數: 6.0 所有向量元素絕對值中的最大值
###########矩陣範數#########
矩陣a為:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
F範數 22.4944437584 矩陣元素絕對值的平方和再開平方
1範數 21.0 列和範數,即所有矩陣列向量絕對值之和的最大值
2範數 22.4092981633 譜範數,即ATA矩陣的最大特徵值的開平方
無窮範數 38.0 行和範數,即所有矩陣行向量絕對值之和的最大值
###########行列式#########
矩陣a為
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]
a的行列式為: 4.73316543133e-30
###########逆矩陣np.linalg.inv()#########
矩陣相乘為單位矩陣E:
[[ 1.  0.]
 [ 0.  1.]]
###########伴隨矩陣#########
[[ 1 -1]
 [ 1  1]]
a的行列式為: 2.0
a的逆矩陣為: [[ 0.5  0.5]
 [-0.5  0.5]]
a的伴隨矩陣為:
[[ 1.  1.]
 [-1.  1.]]
驗證: [[ 2.  0.]
 [ 0.  2.]]
###########A與A逆行列式#########
1.0
###########矩陣的冪matrix_power()#########
[[ 0.66673632  0.24542188  0.24331174]
 [ 0.81223569  0.41511886  0.20157493]
 [ 0.07107783  0.64497704  0.29675985]]
[[ 0.66117181  0.42244142  0.28390083]
 [ 0.89304891  0.50167529  0.34112338]
 [ 0.59235659  0.47658948  0.23537168]]
###########求解AXB=C?#########
[[ -2.   1.]
 [ 10.  -4.]
 [-10.   4.]]