基于Numpy的線性代數(shù)運算

標題中的英文首字母大寫比較規(guī)范攒菠,但在python實際使用中均為小寫迫皱。

1.Numpy中的matrix

1.1 創(chuàng)建matrix對象

numpy.matrix方法的參數(shù)可以為ndarray對象
numpy.matrix方法的參數(shù)也可以為字符串str,示例如下:

import numpy as np
m = np.matrix("1 2 3;4 5 6; 7 8 9")
print(m,type(m))

上面一段代碼的運行結果如下:

[[1 2 3]
[4 5 6]
[7 8 9]] <class 'numpy.matrixlib.defmatrix.matrix'>

1.2 bmat函數(shù)

很神奇的用法辖众, 可以用字符串和已定義的矩陣創(chuàng)建新矩陣卓起。

import numpy as np
a = np.eye(2)
print("a :\n",a)
b = a * 2
print("b :\n",b)
c = np.bmat("a b;b a")
print("c :\n",c)

上面一段代碼的運行結果如下:

a :
[[1. 0.]
[0. 1.]]
b :
[[2. 0.]
[0. 2.]]
c :
[[1. 0. 2. 0.]
[0. 1. 0. 2.]
[2. 0. 1. 0.]
[0. 2. 0. 1.]]

2.算術運算

2.1 ndarray對象的除法運算

5種除法運算方式:
1.divide函數(shù):做除法和敬,返回除法的浮點數(shù)結果
2.true_divide函數(shù):返回除法的浮點數(shù)結果
3.floor_divide函數(shù):做除法,進行向下取整并返回整數(shù)
4.使用/運算符:相當于調用divide函數(shù)
5.使用//運算符:相當于調用floor_divide函數(shù)
示例代碼如下:

import numpy as np 
a = np.array([2,6,5])
b = np.array([1,2,3])
print("divide function result:")
print(np.divide(a,b))
print(np.divide(b,a))
print("true_divide function result:")
print(np.true_divide(a,b))
print(np.true_divide(b,a))
print("floor_divide function result:")
print(np.floor_divide(a,b))
print(np.floor_divide(b,a))

上面一段代碼的運行結果如下:

divide function result:
[ 2. 3. 1.66666667]
[ 0.5 0.33333333 0.6 ]
true_divide function result:
[ 2. 3. 1.66666667]
[ 0.5 0.33333333 0.6 ]
floor_divide function result:
[2 3 1]
[0 0 0]

2.2 ndarray對象的模運算

4種模運算方式:
1.remainder函數(shù):逐個返回兩個數(shù)組中元素相除后的余數(shù)
2.mod函數(shù)與remainder函數(shù)既绩,兩者功能完全一致
3.%操作符是remainder函數(shù)的簡寫
4.fmod函數(shù)所得余數(shù)的正負由被除數(shù)決定概龄,與除數(shù)的正負無關
示例代碼如下:

import numpy as np
a = np.arange(-5,5)
print("remainder function result:")
print(np.remainder(a,3))
print("mod function result:")
print(np.mod(a,3))
print("% operator result:")
print(a % 3)
print("fmod function result:")
print(np.fmod(a,3))

上面一段代碼的運行結果如下:

remainder function result:
[1 2 0 1 2 0 1 2 0 1]
mod function result:
[1 2 0 1 2 0 1 2 0 1]
% operator result:
[1 2 0 1 2 0 1 2 0 1]
fmod function result:
[-2 -1 0 -2 -1 0 1 2 0 1]

3.通用函數(shù)

概念:通用函數(shù)是一種對ndarray中的數(shù)據(jù)執(zhí)行元素級運算的元素还惠。你可以將其看做其他函數(shù)(接受一個或者多個標量饲握,并產生一個或多過標量值)的矢量化包裝器。通用函數(shù)的輸入是一組的標量蚕键,輸入也是一組標量救欧,它們通常可以對應于基本數(shù)學運算锣光,如加笆怠、減、乘誊爹、除蹬刷。
ufunc有兩個類別:
1.一元(unary)ufunc,它們接受一個數(shù)組频丘。返回一個結果數(shù)組办成,當然也能返回兩個數(shù)組,但是這種的不是很常見搂漠;
2.二元(binary)ufunc迂卢,它們接受兩個數(shù)組, 并返回一個結果數(shù)組桐汤。

一元(unary)ufunc

image.png

二元(binary)ufunc

image.png

Numpy已有的通用函數(shù)具備的方法

4種方法:
1 np.add.accumulate返回對矩陣求和結果而克,和np.sum效果相同,返回值數(shù)據(jù)類型為整數(shù)int
2 np.add.reduce返回求和運算的中間結果怔毛,返回值數(shù)據(jù)類型為numpy.ndarray
3 np.add.reduceat返回值數(shù)據(jù)類型為numpy.ndarray
返回ndarray對象的第1個元素是0,5返回索引0-4對應值的求和結果
返回ndarray對象的第2個元素是5,2返回索引5對應值
返回ndarray對象的第3個元素是2,7返回索引2-6對應值的求和結果员萍,即3+4+5+6+7=25
返回ndarray對象的第4個元素是7-end返回索引7-9對應值的求和結果,即8+9+10=27
4 np.add.outer返回值數(shù)據(jù)類型為numpy.ndarray
返回ndarray對象的第1個元素是a所有元素+1的結果
返回ndarray對象的第2個元素是a所有元素+2的結果
返回ndarray對象的第3個元素是a所有元素+3的結果

import numpy as np
a = np.arange(1,11)
print("add.reduce result:")
print(np.add.reduce(a))
print("add.accumulate result:")
print(np.add.accumulate(a))
print("add.reduceat result:")
print(np.add.reduceat(a,[0,5,2,7]))
print("add.outer result:")
print(np.add.outer(np.arange(1,4),a))

上面一段代碼的運行結果如下:

add.reduce result:
55
add.accumulate result:
[ 1 3 6 10 15 21 28 36 45 55]
add.reduceat result:
[15 6 25 27]
add.outer result:
[[ 2 3 4 5 6 7 8 9 10 11]
[ 3 4 5 6 7 8 9 10 11 12]
[ 4 5 6 7 8 9 10 11 12 13]]

4.線性代數(shù)應用

numpy.linalg模塊包含線性代數(shù)的函數(shù)拣度。使用這個模塊碎绎,可以用來:
1.計算逆矩陣;
2.解線性方程蜡娶;
3.求特征值混卵,特征矩陣;
4.求解行列式

4.1 計算逆矩陣

import numpy as np 
A = np.array([[0,1,2],[1,0,3],[4,-3,8]])
print("A = ")
print(A)
inverse = np.linalg.inv(A)
print("A的逆矩陣:")
print(inverse)
I = A * inverse
print("when A and inverse is ndarray object,\n"
    "A * inverse =")
print(I)
I = np.matrix(A) * np.matrix(inverse)
print("when A and inverse is matrix object,\n"
    "A * inverse =")
print(I)

上面一段代碼的運行結果如下:

A =
[[ 0 1 2]
[ 1 0 3]
[ 4 -3 8]]
A的逆矩陣:
[[-4.5 7. -1.5]
[-2. 4. -1. ]
[ 1.5 -2. 0.5]]
when A and inverse is ndarray object,
A * inverse =
[[-0. 7. -3.]
[-2. 0. -3.]
[ 6. 6. 4.]]
when A and inverse is matrix object,
A * inverse =
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]

4.2 解線性方程組

使用numpy.linalg.solve函數(shù)計算線程方程組窖张,需求如下:已知線性方程組,求解x,y,z


線性方程組.png
import numpy as np
A = np.mat("1 -2 1;0 2 -8;-4 5 9")
print("A =")
print(A)
B = np.array([0,8,-9])
print("B =")
print(B)
Solve = np.linalg.solve(A,B)
print("Solve:")
print("x = {0}, y = {1}, z = {2}".format(*Solve))

如果A為numpy.ndarray對象幕随,代碼運行結果一樣。
上面一段代碼的運行結果如下:

A =
[[ 1 -2 1]
[ 0 2 -8]
[-4 5 9]]
B =
[ 0 8 -9]
Solve:
x = 29.0, y = 16.0, z = 3.0

4.3 特征值和特征向量

特征值是方程Ax = ax的解宿接,是一個標量赘淮。其中A是一個二維矩陣辕录,x是一個一維向量。
特征向量是關于特征值的向量梢卸。
在eigvals函數(shù)可以計算矩陣的特征值走诞,而eig函數(shù)可以返回一個包含特征值和對應的特征向量的元組

import numpy as np
A = np.mat("3 -2;1 0")
print("A =")
print(A)
print("A矩陣的特征值:")
print(np.linalg.eigvals(A))
print("A矩陣的特征向量:")
print(np.linalg.eig(A)[1])

上面一段代碼的運行結果如下:

A =
[[ 3 -2]
[ 1 0]]
A矩陣的特征值:
[2. 1.]
A矩陣的特征向量:
[[0.89442719 0.70710678]
[0.4472136 0.70710678]]

6.3金融函數(shù)

1.fv函數(shù):計算所謂的終值蛤高,即基于一些假設給出的某個金融資產在未來某一時間點的價值蚣旱。

`

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市戴陡,隨后出現(xiàn)的幾起案子塞绿,更是在濱河造成了極大的恐慌,老刑警劉巖恤批,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件异吻,死亡現(xiàn)場離奇詭異,居然都是意外死亡喜庞,警方通過查閱死者的電腦和手機诀浪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來延都,“玉大人雷猪,你說我怎么就攤上這事≌叮” “怎么了春宣?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嫉你。 經常有香客問我月帝,道長,這世上最難降的妖魔是什么幽污? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任嚷辅,我火速辦了婚禮,結果婚禮上距误,老公的妹妹穿的比我還像新娘簸搞。我一直安慰自己,他們只是感情好准潭,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布趁俊。 她就那樣靜靜地躺著,像睡著了一般刑然。 火紅的嫁衣襯著肌膚如雪寺擂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音怔软,去河邊找鬼垦细。 笑死,一個胖子當著我的面吹牛挡逼,可吹牛的內容都是我干的括改。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼家坎,長吁一口氣:“原來是場噩夢啊……” “哼嘱能!你這毒婦竟也來了?” 一聲冷哼從身側響起乘盖,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤焰檩,失蹤者是張志新(化名)和其女友劉穎憔涉,沒想到半個月后订框,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡兜叨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年穿扳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片国旷。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡矛物,死狀恐怖,靈堂內的尸體忽然破棺而出跪但,到底是詐尸還是另有隱情履羞,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布屡久,位于F島的核電站忆首,受9級特大地震影響,放射性物質發(fā)生泄漏被环。R本人自食惡果不足惜糙及,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筛欢。 院中可真熱鬧浸锨,春花似錦、人聲如沸版姑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剥险。三九已至聪蘸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宇姚。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工匈庭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浑劳。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓阱持,卻偏偏與公主長得像,于是被迫代替她去往敵國和親魔熏。 傳聞我的和親對象是個殘疾皇子衷咽,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內容

  • 來源:NumPy Tutorial - TutorialsPoint 譯者:飛龍 協(xié)議:CC BY-NC-SA 4...
    布客飛龍閱讀 32,725評論 6 96
  • 基礎篇NumPy的主要對象是同種元素的多維數(shù)組。這是一個所有的元素都是一種類型蒜绽、通過一個正整數(shù)元組索引的元素表格(...
    oyan99閱讀 5,115評論 0 18
  • 先決條件 在閱讀這個教程之前镶骗,你多少需要知道點python。如果你想從新回憶下躲雅,請看看Python Tutoria...
    舒map閱讀 2,570評論 1 13
  • 介紹 NumPy 是一個 Python 包鼎姊。 它代表 “Numeric Python”。 它是一個由多維數(shù)組對象和...
    喔蕾喔蕾喔蕾蕾蕾閱讀 1,763評論 0 5
  • NumPy是Python中關于科學計算的一個類庫相赁,在這里簡單介紹一下相寇。 來源:https://docs.scipy...
    灰太狼_black閱讀 1,224評論 0 5