1. 程式人生 > >python矩陣運算

python矩陣運算

Python使用NumPy包完成了對N-維陣列的快速便捷操作。使用這個包,需要匯入numpy。SciPy包以NumPy包為基礎,大大的擴充套件了numpy的能力。為了使用的方便,scipy包在最外層名字空間中包括了所有的numpy內容,因此只要匯入了scipy,不必在單獨匯入numpy了!但是為了明確哪些是numpy中實現的,哪些是scipy中實現的,本文還是進行了區分。以下預設已經:import numpy as np 以及 impor scipy as sp

下面簡要介紹Python和MATLAB處理數學問題的幾個不同點。1.MATLAB的基本是矩陣,而numpy的基本型別是多為陣列,把matrix看做是array的子類。2.MATLAB的索引從1開始,而numpy從0開始。

1.建立矩陣

a1=np.array([1,2,3],dtype=int)   #建立一個一維陣列,資料型別是int。也可以不指定資料型別,使用預設。幾乎所有的陣列建立函式都可以指定資料型別,即dtype的取值。
a2=np.array([[1,2,3],[2,3,4]])   #建立一個二維陣列。此處和MATLAB的二維陣列(矩陣)的建立有很大差別。
同樣,numpy中也有很多內建的特殊矩陣:
b1=np.zeros((2,3))    #生成一個2行3列的全0矩陣。注意,引數是一個tuple:(2,3),所以有兩個括號。完整的形式為:zeros(shape,dtype=)。相同的結構,有ones()建立全1矩陣。empty()建立一個空矩陣,使用記憶體中的隨機值來填充這個矩陣。
b2=identity(n) #建立n*n的單位陣,這隻能是一個方陣。 b3=eye(N,M=None,k=0) #建立一個對角線是1其餘值為0的矩陣,用k指定對角線的位置。M預設None。 此外,numpy中還提供了幾個like函式,即按照某一個已知的陣列的規模(幾行幾列)建立同樣規模的特殊陣列。這樣的函式有zeros_like()、empty_like()、ones_like(),它們的引數均為如此形式:zeros_like(a,dtype=),其中,a是一個已知的陣列。 c1=np.arange(2,3,0.1) #起點,終點,步長值。含起點值,不含終點值。 c2=np.linspace(1
,4,10) #起點,終點,區間內點數。起點終點均包括在內。同理,有logspace()函式 d1=np.linalg.companion(a) #伴隨矩陣 d2=np.linalg.triu()/tril() #作用同MATLAB中的同名函式 e1=np.random.rand(3,2) #產生一個3行2列的隨機陣列。同一空間下,有randn()/randint()等多個隨機函式 fliplr()/flipud()/rot90() #功能類似MATLAB同名函式。 xx=np.roll(x,2) #roll()是迴圈移位函式。此呼叫表示向右迴圈移動2位。

2.陣列的特徵資訊

先假設已經存在一個N維陣列X了,那麼可以得到X的一些屬性,這些屬性可以在輸入X和一個.之後,按tab鍵檢視提示。這裡明顯看到了Python面向物件的特徵。

X.flags    #陣列的儲存情況資訊。
X.shape    #結果是一個tuple,返回本陣列的行數、列數、……
X.ndim   #陣列的維數,結果是一個數
X.size    #陣列中元素的數量
X.itemsize    #陣列中的資料項的所佔記憶體空間大小
X.dtype    #資料型別
X.T   #如果X是矩陣,發揮的是X的轉置矩陣
X.trace()    #計算X的跡
np.linalg.det(a)   #返回的是矩陣a的行列式
np.linalg.norm(a,ord=None)    #計算矩陣a的範數
np.linalg.eig(a)    #矩陣a的特徵值和特徵向量
np.linalg.cond(a,p=None)    #矩陣a的條件數
np.linalg.inv(a)    #矩陣a的逆矩陣

3.矩陣分解

常見的矩陣分解函式,numpy.linalg均已經提供。比如cholesky()/qr()/svd()/lu()/schur()等。某些演算法為了方便計算或者針對不同的特殊情況,還給出了多種呼叫形式,以便得到最佳結果。

4.矩陣運算

np.dot(a,b)用來計算陣列的點積;vdot(a,b)專門計算向量的點積,和dot()的區別在於對complex資料型別的處理不一樣;innner(a,b)用來計算內積;outer(a,b)計算外積。
專門處理矩陣的數學函式在numpy的子包linalg中定義。比如np.linalg.logm(A)計算矩陣A的對數。可見,這個處理和MATLAB是類似的,使用一個m字尾表示是矩陣的運算。在這個空間內可以使用的有cosm()/sinm()/signm()/sqrtm()等。其中常規exp()對應有三種矩陣形式:expm()使用Pade近似演算法、expm2()使用特徵值分析演算法、expm3()使用泰勒級數演算法。在numpy中,也有一個計算矩陣的函式:funm(A,func)。

5.索引

numpy中的陣列索引形式和Python是一致的。如:
x=np.arange(10)
print x[2]    #單個元素,從前往後正向索引。注意下標是從0開始的。
print x[-2]    #從後往前索引。最後一個元素的下標是-1
print x[2:5]    #多個元素,左閉右開,預設步長值是1
print x[:-7]    #多個元素,從後向前,制定了結束的位置,使用預設步長值
print x[1:7:2]   #指定步長值
x.shape=(2,5)    #x的shape屬性被重新賦值,要求就是元素個數不變。2*5=10
print x[1,3]    #二維陣列索引單個元素,第2行第4列的那個元素
print x[0]   #第一行所有的元素
y=np.arange(35).reshape(5,7)    #reshape()函式用於改變陣列的維度
print y[1:5:2,::2]    #選擇二維陣列中的某些符合條件的元素

相關推薦

python矩陣運算

Python使用NumPy包完成了對N-維陣列的快速便捷操作。使用這個包,需要匯入numpy。SciPy包以NumPy包為基礎,大大的擴充套件了numpy的能力。為了使用的方便,scipy包在最外層名字空間中包括了所有的numpy內容,因此只要匯入了scipy,

python 矩陣運算

本文轉自:http://blog.sina.com.cn/s/blog_5f234d4701012p64.html 科學計算:Python VS. MATLAB(3)----線性代數基礎     按:在介紹工具之前先對理論基礎進行必要的回顧是很必要的。沒有理論的基礎,講再多

Python學習筆記5 【轉載】基本矩陣運算_20170618

ros class 簡單 lba spa 使用 常見 port 模塊 需要 numpy 庫支持 保存鏈接 http://www.cnblogs.com/chamie/p/4870078.html 1.numpy的導入和使用 from numpy import *;

python中的矩陣運算

創建 二維 style ron -h courier strong random 轉置 1.numpy的導入和使用 from numpy import *;#導入numpy的庫函數import numpy as np; #這個方式使用numpy的函數時,需要以np.開頭。

Cris 的 Python 資料分析筆記 03:NumPy 矩陣運算和常用函式(重點)

03. 矩陣運算和常用函式(重點) 文章目錄 03. 矩陣運算和常用函式(重點) 1. numpy 矩陣判斷和計算 1.1 與運算 1.2 或運算 1.3 或運算作為矩陣索引賦值

python學習日記7tensorflow-矩陣運算

寫了測試小程式 import tensorflow as tf sess =tf.Session() a=tf.ones([2,3],tf.int32) print(sess.run(a)) b=tf.zeros([2,3],tf.int32) print(sess.run(b)

python 常見矩陣運算

python 的 numpy 庫提供矩陣運算的功能,因此我們在需要矩陣運算的時候,需要匯入 numpy 的包。 1.numpy 的匯入和使用 from numpy import *;#匯入numpy的庫函式 import numpy as np; #這個方式使用numpy的函式時,需要以np.開頭。

Python之線性代數(矩陣運算,逆矩陣,伴隨矩陣

np.eye(10)*10 # 10階方陣,當對角線值為1時為對角矩陣 np.eye(5) array([[1., 0., 0., 0., 0.], [0., 1., 0., 0., 0.], [0., 0., 1

python的常見矩陣運算

原文連結:https://blog.csdn.net/taxueguilai1992/article/details/46581861 python的numpy庫提供矩陣運算的功能,因此我們在需要矩陣運算的時候,需要匯入numpy的包。 1.numpy的匯入和使用 fr

Python 機器學習——線性代數和矩陣運算 從matlab遷移到python

                       誠然,沒有一門語言能夠撼動matlab的矩陣或科學計算在學術圈的地位,因其簡潔的語法(matrix是其基本資料型別),因其矩陣運算的便捷,因其術業有專攻(matlab:為科學計算而生),因其名字matlab:matrix laboratory,所在的公司名math

Python進行矩陣運算

入門神經網路過程中遇到以下計算: (1)  (1,-1,0,0.5)'+0.905*(1,-2,1.5,0)' Python中程式設計計算如下: import numpy as np a=np.array([[1],[-2],[1.5],[0]])*0.905 b

Python中的numpy矩陣運算

numpy中matrix 和 array的區別 Numpy matrices必須是2維的,但是 numpy arrays (ndarrays) 可以是多維的(1D,2D,3D····ND). Matrix是Array的一個小的分支,包含於Array。所以mat

Python 機器學習——線性代數和矩陣運算:從matlab遷移到python

誠然,沒有一門語言能夠撼動matlab的矩陣或科學計算在學術圈的地位,因其簡潔的語法(matrix是其基本資料型別),因其矩陣運算的便捷,因其術業有專攻(matlab:為科學計算而生),因其名字matlab:matrix laboratory,所在的公司名

常見矩陣運算Python

python的numpy庫提供矩陣運算的功能,因此我們在需要矩陣運算的時候,需要匯入numpy的包。 1.numpy的匯入和使用 from numpy import *;#匯入numpy的庫函式 import numpy as np; #這個方式使用numpy的函式時,需要

一起學python-opencv四(字串操作和陣列運算矩陣運算

沒錯,這個應該是暫時的numpy的第一階段學習的最後一講。在下一講將要先回歸到opencv,因為暫時這些numpy的知識肯定是夠好幾講用的,numpy這個東西確實有點枯燥,所以先回歸到opencv應用一下,理論到實踐的過程是需要的。我們還是耐心地 字串函式

python numpy包---矩陣運算

下面簡要介紹Python和MATLAB處理數學問題的幾個不同點。1.MATLAB的基本是矩陣,而numpy的基本型別是多為陣列,把matrix看做是array的子類。2.MATLAB的索引從1開始,而numpy從0開始。 1.建立矩陣 a1=np.array([1,2

Python 5 運算

賦值運算 顯示 結果 小數位數 不同版本 如果 and 求余 邏輯運算符 數學運算符:   +   加 1 + 1 = 2   -   減      2 - 1 = 1   ×   乘      2 × 2 = 4   /   除    

HDOJ 題目5097 Page Rank(矩陣運算,模擬)

java several similar padding ora ont ria render car Page Rank Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 100000/10000

HDU多校賽第9場 HDU 4965Fast Matrix Calculation【矩陣運算+數學小知識】

stdin amp line you stream [] nbsp content ans 難度上。,,確實。。。不算難 問題是有個矩陣運算的優化 題目是說給個N*K的矩陣A給個K*N的矩陣B(1<=N<=1000 && 1=<K<

Python set運算 集合差集,並集,交集,list去重復

bsp 一行 color nbsp 方便 移除 line pytho 差集 在沒有發現方便的set運算之前,都是用遍歷list查找兩個集合的差別。 比如, 找list1和list2的差集 for i in list1: if not i in list2: