導航:首頁 > 編程語言 > pythonnumpy矩陣操作

pythonnumpy矩陣操作

發布時間:2022-12-07 08:32:51

python如何輸入矩陣

使用numpy創建矩陣有2種方法,一種是使用numpy庫的matrix直接創建,另一種則是使用array來創建。
首先導入numpy:
(1)import numpy
(2)from numpy import *
(3)import numpy as np
相關推薦:《Python基礎教程》
然後分別用上面說的2種方法來分別構建一個4×3的矩陣,如圖:

⑵ Numpy的各種下標操作

目錄

本文所使用的Numpy版本為: Version: 1.20.3 。基於Python和C++開發的Numpy一般被認為是Python中最好的Matlab替代品,其中最常見的就是各種Numpy矩陣類型的運算。對於矩陣的運算而言,取對軸和元素是至關重要的,這里我們來看看一些常見的Numpy下標取法和標記。

這里我們定義一個4*4的矩陣用於取下標,為了方便理解,這個矩陣中所有的元素都是不一樣的:

比如我們想取第一行的所有元素,那麼就是x[0],如果想取第一行的第一列的元素,那麼就是x[0][0],而在numpy中為了簡化,可以講x[0][0]寫成x[0,0]的形式:

在上一個章節中我們提到的取單個元素x[0,0]的方法,其實本質上等同於x[(0,0)],也就是一個tuple的格式,但是如果把這里的tuple格式換成list,所表示的含義和得到的結果是完全不一樣的:

這里list格式的id,代表的意思是分別取第二行和第二行的內容,再放到一個完整的矩陣中。如果id設置為[1,2]的話,就是分別取第二行和第三行,而不是取第二行的第二個元素。如果需要取第二行的第二列的元素,那麼還是需要用tuple的格式來取下標。有一個比較有意思的點是,如果把剛才的下標重復輸入兩次,也就是x[[1,2],[1,2]]的話,所表示的含義是分別取x[1][1]和x[2][2],再放到同一個矩陣中,也是一種比較常用的分離式取下標的方法。

在Numpy的下標中,冒號和後置逗號同時出現,表示軸向全取,比如x[0,:]表示取x的第一行的所有數據,x[:,0]表示取第一列的所有數據:

雖然上文我們提到,如果下標被定義成一個list格式的話,就表示分別取。但是目前Numpy的實現中還有這樣的一個遺留問題,就是使用多維的list格式取下標,會自動將最外層轉化成tuple的格式,採用tuple的取法。雖然計算時會給出告警,但是目前來說也需要引起一定的注意。

在Numpy中冒號不與後置逗號同時出現時,表示的含義是從冒號前的元素取值到冒號後的元素,比如x[0:3]所表示的元素是[x[0],x[1],x[2]]。如果是兩個冒號連用中間沒有逗號的話,比如x[0:3:2],表示的是每隔2個元素取一個,最後得到的應該是[x[0],x[2]]。還有一種非常常見的操作是取[::-1]這樣的下標,所表示的含義就是對當前軸進行倒序。

雖然在Numpy中有broadcast和expand_dim之類的函數可以對矩陣進行擴維或者是廣播,但是更方便的操作是對需要擴展的維度取一個None的下標,比如要把一個(4,4)大小的矩陣擴展成(1,4,4),那麼就對下標取[None,:]或者[None,:,:]即可。而如果需要把(4,4)變成(4,1,4),那就需要把None換個位置為[:,None,:]就可以實現:

在高維矩陣中,因為沒有了行和列這樣的概念,因此需要從軸上去理解相關操作,我們先定義一個簡單的三維張量:

常規的操作其實都跟前面章節中介紹二維張量一致,這里我們考慮一種比較特殊的場景。就是如果同樣用二維矩陣的取法去取,只是第一條軸每個元素取一個id,比如取第0條軸的[0,1]元素和第1條軸的[2,3]元素,那麼其實最簡單的方案就是在第一個下標的位置加上一個位置元素,這個位置元素用下標id的第一個軸的長度去定義即可:

這篇文章的主要內容是梳理在Numpy中經常用到的各種取下標的操作,包括但不限於取指定軸的所有元素、取指定位置的單個元素、取指定位置的多個元素、擴維以及取未顯式給定位置的多個元素等等。比較重要的是在Numpy中tuple的取法和list的取法是代表不一樣的含義,並且由於 歷史 原因,Numpy中存在一些list取法和numpy.array的取法表示不一致的地方,在本文中進行了總結。

本文首發鏈接為:https://www.cnblogs.com/dechinphy/p/numpy-id.html

作者ID:DechinPhy

更多原著文章請參考:https://www.cnblogs.com/dechinphy/

打賞專用鏈接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

騰訊雲專欄同步:https://cloud.tencent.com/developer/column/91958

⑶ python的矩陣可以做什麼

python的numpy庫提供矩陣運算的功能,因此我們在需要矩陣運算的時候,需要導入numpy的包。
計算矩陣對應行列的最大、最小值、和。
3>>>a1=mat([[1,1],[2,3],[4,2]])
>>> a1
matrix([[1, 1],
[2, 3],
[4, 2]])
計算每一列、行的和
>>>a2=a1.sum(axis=0) #列和,這里得到的是1*2的矩陣
>>> a2
matrix([[7, 6]])
>>>a3=a1.sum(axis=1) #行和,這里得到的是3*1的矩陣
>>> a3
matrix([[2],
[5],
[6]])
>>>a4=sum(a1[1,:]) #計算第一行所有列的和,這里得到的是一個數值
>>> a4
5 #第0行:1+1;第2行:2+3;第3行:4+2
計算最大、最小值和索引
>>>a1.max() #計算a1矩陣中所有元素的最大值,這里得到的結果是一個數值
4
>>>a2=max(a1[:,1]) #計算第二列的最大值,這里得到的是一個1*1的矩陣
>>> a2
matrix([[3]])
>>>a1[1,:].max() #計算第二行的最大值,這里得到的是一個一個數值
3
>>>np.max(a1,0) #計算所有列的最大值,這里使用的是numpy中的max函數
matrix([[4, 3]])
>>>np.max(a1,1) #計算所有行的最大值,這里得到是一個矩陣
matrix([[1],
[3],
[4]])
>>>np.argmax(a1,0) #計算所有列的最大值對應在該列中的索引
matrix([[2, 1]])
>>>np.argmax(a1[1,:]) #計算第二行中最大值對應在該行的索引
1

⑷ Python numpy矩陣值之間進行快速映射

numpy.vectorize(),詳情見 文檔

實現:

這里我是把矩陣的值進行一對一映射,其中lab.id2trainId是一個字典,dictionary的get方法可以返回指定鍵的值,這樣就構成了映射關系,處理速度很快。

除了一對一單值映射之外,比如把一個值映射為一個tuple也是可以的,這個tuple可以是RGB值,這樣就可以把原本一個矩陣以帶顏色的圖片形式顯示了。

⑸ python 矩陣操作, 篩選符合條件的行

我舉個簡單的例子:


取出含有元素0的所有行

importnumpyasnp
x=np.array([[1,2,3,4,0],[2,3,4,5,6],[0,1,2,3,4]])
b=[]
forrowinx:
foriinrow:
ifi==0:
b.append(row)
printb

PS G:Python learning-Q> python ex.py

[array([1, 2, 3, 4, 0]), array([0, 1, 2, 3, 4])]

⑹ python numpy 兩個矩陣每個元素求並集,並返回一個與這兩個矩陣大小相同的矩陣

直接兩個矩陣相加就可以了

兩個矩陣相加即是對應位置的相加,而Python中的True、False值相加時是相當於1和0的,np中加之後又要保持原來的數據類型,所以1+1=2也會變成True

>>>importnumpyasnp
>>>a=np.array([[True,True],[False,False]])
>>>b=np.array([[True,False],[True,False]])
>>>a
array([[True,True],
[False,False]],dtype=bool)
>>>b
array([[True,False],
[True,False]],dtype=bool)
>>>a+b
array([[True,True],
[True,False]],dtype=bool)
>>>True+False
1
>>>True+True
2
>>>False+False
0
>>>bool(1)
True
>>>bool(2)
True
>>>bool(0)
False

⑺ python中稀疏矩陣的怎麼用numpy處理

NumPy是一個關於矩陣運算的庫,熟悉Matlab的都應該清楚,這個庫就是讓python能夠進行矩陣話的操作,而不用去寫循環操作。
下面對numpy中的操作進行總結。
numpy包含兩種基本的數據類型:數組和矩陣。
數組(Arrays)
>>> from numpy import *>>> a1=array([1,1,1]) #定義一個數組>>> a2=array([2,2,2])>>> a1+a2 #對於元素相加array([3, 3, 3])>>> a1*2 #乘一個數array([2, 2, 2])##>>> a1=array([1,2,3])>>> a1
array([1, 2, 3])>>> a1**3 #表示對數組中的每個數做平方array([ 1, 8, 27])##取值,注意的是它是以0為開始坐標,不matlab不同>>> a1[1]2##定義多維數組>>> a3=array([[1,2,3],[4,5,6]])>>> a3
array([[1, 2, 3],
[4, 5, 6]])>>> a3[0] #取出第一行的數據array([1, 2, 3])>>> a3[0,0] #第一行第一個數據1>>> a3[0][0] #也可用這種方式1##數組點乘,相當於matlab點乘操作>>> a1=array([1,2,3])>>> a2=array([4,5,6])>>> a1*a2
array([ 4, 10, 18])

Numpy有許多的創建數組的函數:
import numpy as np

a = np.zeros((2,2)) # Create an array of all zerosprint a # Prints "[[ 0. 0.]
# [ 0. 0.]]"b = np.ones((1,2)) # Create an array of all onesprint b # Prints "[[ 1. 1.]]"c = np.full((2,2), 7) # Create a constant arrayprint c # Prints "[[ 7. 7.]
# [ 7. 7.]]"d = np.eye(2) # Create a 2x2 identity matrixprint d # Prints "[[ 1. 0.]
# [ 0. 1.]]"e = np.random.random((2,2)) # Create an array filled with random valuesprint e # Might print "[[ 0.91940167 0.08143941]
# [ 0.68744134 0.87236687]]"

數組索引(Array indexing)
矩陣
矩陣的操作與Matlab語言有很多的相關性。
#創建矩陣
>>> m=mat([1,2,3])
>>> m
matrix([[1, 2, 3]])

#取值
>>> m[0] #取一行
matrix([[1, 2, 3]])
>>> m[0,1] #第一行,第2個數據2>>> m[0][1] #注意不能像數組那樣取值了
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/usr/lib64/python2.7/site-packages/numpy/matrixlib/defmatrix.py", line 305, in __getitem__
out = N.ndarray.__getitem__(self, index)
IndexError: index 1 is out of bounds for axis 0 with size 1#將Python的列表轉換成NumPy的矩陣
>>> list=[1,2,3]
>>> mat(list)
matrix([[1, 2, 3]])

#矩陣相乘
>>> m1=mat([1,2,3]) #1行3列
>>> m2=mat([4,5,6])
>>> m1*m2.T #注意左列與右行相等 m2.T為轉置操作
matrix([[32]])
>>> multiply(m1,m2) #執行點乘操作,要使用函數,特別注意
matrix([[ 4, 10, 18]])

#排序
>>> m=mat([[2,5,1],[4,6,2]]) #創建2行3列矩陣
>>> m
matrix([[2, 5, 1],
[4, 6, 2]])
>>> m.sort() #對每一行進行排序
>>> m
matrix([[1, 2, 5],
[2, 4, 6]])

>>> m.shape #獲得矩陣的行列數
(2, 3)
>>> m.shape[0] #獲得矩陣的行數2>>> m.shape[1] #獲得矩陣的列數3#索引取值
>>> m[1,:] #取得第一行的所有元素
matrix([[2, 4, 6]])
>>> m[1,0:1] #第一行第0個元素,注意左閉右開
matrix([[2]])
>>> m[1,0:3]
matrix([[2, 4, 6]])
>>> m[1,0:2]
matrix([[2, 4]])35363738394

擴展矩陣函數tile()
例如,要計算[0,0,0]到一個多維矩陣中每個點的距離,則要將[0,0,0]進行擴展。
tile(inX, (i,j)) ;i是擴展個數,j是擴展長度
實例如下:
>>>x=mat([0,0,0])
>>> x
matrix([[0, 0, 0]])
>>> tile(x,(3,1)) #即將x擴展3個,j=1,表示其列數不變
matrix([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
>>> tile(x,(2,2)) #x擴展2次,j=2,橫向擴展
matrix([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])1234567891011121314

⑻ python庫numpy使用技巧(二)——隨機抽取二維矩陣中多行或多列

使用庫numpy

創建一個二維數組

行與列隨機抽取類似

行隨機抽取

列隨機抽取

閱讀全文

與pythonnumpy矩陣操作相關的資料

熱點內容
文件夾側面目錄標簽怎麼製作 瀏覽:230
做程序員學什麼 瀏覽:320
pdfeditor教程 瀏覽:880
fortran把文件放入文件夾 瀏覽:709
程序員1年經驗不敢投簡歷 瀏覽:481
如何看電腦的源碼 瀏覽:897
找工作app軟體哪個好 瀏覽:96
信息管理網站源碼 瀏覽:439
小說app哪個好免費 瀏覽:224
域名在線加密 瀏覽:146
軟體編程西安交大 瀏覽:453
是不是串貨的奶粉查不到溯源碼的 瀏覽:825
北京dns伺服器雲主機 瀏覽:221
openldaplinux安裝 瀏覽:23
java取月的最後一天 瀏覽:10
騰訊雲伺服器多久退款 瀏覽:949
微信廣告植入系統源碼 瀏覽:922
一年級語文上冊pdf 瀏覽:315
好久不見app干什麼用的 瀏覽:143
壓縮包解壓碼對方可以更改嗎 瀏覽:256