亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【Python】Numpy之矩陣的相關計算及矩陣的選取與切割

系統 2594 0

Numpy有很多矩陣運算的方法,小白總結了一些常用和認為在算法中用到的方法~

基礎操作:

首先創建兩個矩陣

            
              A = np.array([[1,2],[1,2]])
B = np.array([[2,4],[5,5]])
            
          

1.矩陣對應位置的元素相加

            
              #矩陣同位置元素相加
np.add(A,B)#方法1
A+B     #方法2
            
          

結果都為:

            
              array([[3, 6],
       [6, 7]])
            
          

2.矩陣對應位置的元素相乘

            
              #矩陣對應位置的每個元素相乘
A*B
            
          

結果為:

            
              array([[ 2,  8],
       [ 5, 10]])
            
          

與之對應的就有矩陣相乘的運算

            
              #矩陣相乘
A.dot(B)   #方法1
np.dot(A,B)#方法2
            
          

結果為:

            
              array([[12, 14],
       [12, 14]])
            
          

進階操作:

用之前博文中介紹過的arange函數創建一個矩陣

這里用arange中的reshape函數創建了一個6*4的矩陣,如果不指定,默認就是一行的矩陣

            
              A = np.arange(24).reshape(6,4)
            
          

結果為:

            
              array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])
            
          

創建好矩陣之后來一寫進階的計算:

1)sum函數

? ? axis就是確定沿矩陣的行或者列進行加和

? ?axis=0:沿著每一列進行操作(所以返回4個值)
? ?axis=1:沿著每一行進行操作(6個行返回六個值)

            
              A.sum(axis=0)
A.sum(axis=1)
            
          

axis=0的結果:

            
              array([60, 66, 72, 78])
            
          

axis=1的結果:

            
              array([ 6, 22, 38, 54, 70, 86])
            
          

2)cumsum函數

? ?axis就是確定沿矩陣的行或者列進行加和

? ?axis=0:沿著每一列對這個位置及之前位置的元素累加
? ?axis=1:沿著每一行對這個位置及之前位置的元素累加

            
              A.cumsum(axis=1)
A.cumsum(axis=0)
            
          

?

axis=1的結果:

            
              array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38],
       [12, 25, 39, 54],
       [16, 33, 51, 70],
       [20, 41, 63, 86]], dtype=int32)
            
          

axis=0的結果:

            
              array([[ 0,  1,  2,  3],
       [ 4,  6,  8, 10],
       [12, 15, 18, 21],
       [24, 28, 32, 36],
       [40, 45, 50, 55],
       [60, 66, 72, 78]], dtype=int32)
            
          

3.min函數

? ?axis就是確定沿矩陣的行或者列取最小值

? ?axis=0:沿著每一列取最小值
? ?axis=1:沿著每一行取最大值

            
              A.min(axis=0)
A.min(axis=1)
            
          

? axis=0的結果:

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

axis=1的結果:

            
              array([ 0,  4,  8, 12, 16, 20])
            
          

像這樣的函數還有很多,不再一一介紹,不過都是按照axis=1按列操作,axis=0按行操作的規律進行的。

矩陣元素的選取:

            
              a = np.arange(10)**2
array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81], dtype=int32)
            
          

選取某個位置的元素:

            
              a[5]
25
            
          

從結果是25可以看出,下標是從0開始計數。

選取某幾個元素:

從結果可以看出,選取的元素是從第一個參數開始,第二個參數為止且不包含第二個參數位置的元素。

            
              a[1:3]
array([1, 4], dtype=int32)
            
          

下面介紹一個大家在復制矩陣時有可能遇到的坑~

            
              a_slice = a[0:5]
array([100, 100, 100,   9,  16], dtype=int32)
            
          

這里選取了0-4位置的元素變成一個新的array,下面對此array進行操作:

可以看到該操作,也同樣對a產生了影響,因為,當選取部分np array的時候,我們創建了一個view,也就是說,我們沒有copy之前的值,而是直接改了原來的array。

            
              a_slice[0]=222
a_slice
array([222, 100, 100,   9,  16], dtype=int32)
a
array([222, 100, 100,   9,  16,  25,  36,  49,  64,  81], dtype=int32)
            
          

那么,如果我們不想改變之前的array怎么辦呢?

這時,就用到了copy函數,是指將數據copy到新的array中并不對原array產生影響。

            
              a_slice_2 = a[0:5].copy()
a_slice_2[1]=222
array([222, 222, 100,   9,  16], dtype=int32)
            
          

下面總結一下用方程建矩陣,及多維矩陣的選取和切片:

            
              def f(x,y):
    return 4 * x +y
b = np.fromfunction(f,(3,2),dtype=int)
b
            
          

這里我們就自定義了一個函數f,下面用fromfunction方法創建一個三行兩列的數組

結果為:

            
              array([[0, 1],
       [4, 5],
       [8, 9]])
            
          

array的選取:

[:]:僅針對行的操作

[:,]:對行和列的選取

            
              #全選
b[:]
array([[0, 1],
       [4, 5],
       [8, 9]])
#從某行開始選到某行結束
b[:1]
array([[0, 1]])
#選取所有行和第一列
b[:,1]
array([1, 5, 9])
#選取行
b[1]
array([4, 5])
#選取某個位置的元素
b[1,0]
4
            
          

這里再說一些shape函數的用法,之前博文中也有提到:

這里0指的是該矩陣有幾行,1代表這個矩陣有幾列

            
              b.shape[0]
3
b.shape[1]
2
            
          

矩陣的轉至,先舉一個一般的矩陣的轉至,以上面的b矩陣為例:

            
              b.T
array([[0, 4, 8],
       [1, 5, 9]])
            
          

那么對于堆矩陣,如何轉至呢?

首先創建一個堆:

            
              c=np.array([[[1,2,3,0],[3,4,5,2]]])
c.shape
            
          

這是一個一堆兩行四列的矩陣

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

直接使用T轉至函數:

            
              c.T
            
          

結果為:

            
              array([[[1],
        [3]],

       [[2],
        [4]],

       [[3],
        [5]],

       [[0],
        [2]]])
            
          

看下轉至后的類型:可以看到是原來的每列變成堆,所以變成4堆,整體變為4堆兩行一列

            
              c.T.shape
            
          
            
              (4, 2, 1)
            
          

這時候就有一個進階函數,可以指定轉變的方式

            
              c.transpose(0,2,1)
            
          

三個參數的意思是,第一個維度不變,后面兩個維度交換位置,那形狀就變成了一堆四行兩列

結果為:

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

求逆矩陣

            
              a1 = np.mat([[3,4],[2,16]])
np.linalg.inv(np.dot(a1.T,a1))
            
          

結果為:

            
              matrix([[ 0.17    , -0.0275  ],
        [-0.0275  ,  0.008125]])
            
          

比較兩個矩陣是否相同:

            
              a = np.array([[1.,2.],[3.,4.]])
ainv = np.linalg.inv(a)
np.allclose(np.dot(a,ainv),np.eye(2))
            
          

結果為:

            
              True
            
          

以上就是一些介紹啦~


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧洲色网 | 亚洲欧洲一区二区三区在线观看 | 色中文字幕 | 国产在线91精品 | 日韩欧美手机在线 | 久久草在线视频免费 | 亚洲欧美另类图片 | 亚洲精品一区二区乱码在线观看 | 国产网站麻豆精品视频 | 欧美毛片日韩一级在线 | 成年视频免费 | 中文字幕在线最新在线不卡 | 日本在线视频毛片 | 亚洲国产成人最新精品资源 | 亚洲国产精品久久久久 | 国产精品国产自线在线观看 | 久草精品在线观看 | 全黄大全大色全免费大片 | 九九热九九| 色综合久久88一加勒比 | 高清毛片免费看 | 久久爱www成人 | 99视频在线看观免费 | 精品中文字幕久久久久久 | 久久99精品福利久久久 | 久久精品在线观看 | 亚洲欧美在线观看一区二区 | 亚洲码和乱人伦中文一区 | 精品福利一区二区三区免费视频 | 日韩免费一级片 | 亚洲欧美乱综合图片区小说区 | 四虎影视在线影院在线观看观看 | 久久久国产在线 | 日本黄色小视频在线观看 | 交专区videossex另类 | 日本精品在线视频 | 久久综合九色综合欧洲 | 亚洲va欧美va国产va天堂影 | 狠狠做狠狠做综合日日 | 亚洲精品视频在线播放 | 亚洲性综合|