日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NumPy快速入门--形状操作

發布時間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NumPy快速入门--形状操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 更改數組的形狀
    • 2. 將不同數組堆疊在一起
    • 3. 將一個數組分成幾個較小的數組

1. 更改數組的形狀

>>> import numpy as np >>> a = np.floor(10*np.random.random((3,4))) >>> a array([[2., 2., 5., 6.],[2., 7., 4., 2.],[9., 3., 5., 8.]]) >>> a.shape (3, 4)

數組的形狀可通過各種命令更改。請注意,以下三個命令都返回修改后新的數組,原始數組不變

ravel()、reshape(m,n)、T >>> a.ravel() # ravel拆開的意思,展平數組 array([2., 2., 5., 6., 2., 7., 4., 2., 9., 3., 5., 8.]) >>> a.reshape(6,2) #返回新的修改行數列數后的數組 array([[2., 2.],[5., 6.],[2., 7.],[4., 2.],[9., 3.],[5., 8.]]) >>> a.T #行列互換,轉置 array([[2., 2., 9.],[2., 7., 3.],[5., 4., 5.],[6., 2., 8.]]) >>> a.T.shape (4, 3) >>> a.shape (3, 4)

下面這段話不明白:
由ravel()產生的數組中元素的順序通常是“C風格”,也就是說,最右邊的索引“改變最快”,所以[0,0]之后的元素是[0,1] 。如果數組被重新塑造成其他形狀,數組又被視為“C-style”。NumPy通常創建按此順序存儲的數組,因此ravel()通常不需要復制其參數,但如果數組是通過切片另一個數組或使用不尋常選項創建的,則可能需要復制它。函數ravel()和reshape()也可以通過使用可選參數來指示使用FORTRAN風格的數組,其中最左側的索引更改速度最快。

  • reshape(m,n) 函數返回具有修改形狀的參數,而 ndarray.resize((m,n)) 方法修改原始數組
>>> a array([[2., 2., 5., 6.],[2., 7., 4., 2.],[9., 3., 5., 8.]])>>> a.resize((2,6)) >>> a array([[2., 2., 5., 6., 2., 7.],[4., 2., 9., 3., 5., 8.]])
  • 如果在reshape(m,n)操作中將維度指定為-1,則會自動計算該維度
>>> a.reshape(3,-1) #不想算的維度設置成-1,偷懶 array([[2., 2., 5., 6.],[2., 7., 4., 2.],[9., 3., 5., 8.]]) >>> a.reshape(-1,3) array([[2., 2., 5.],[6., 2., 7.],[4., 2., 9.],[3., 5., 8.]])

2. 將不同數組堆疊在一起

  • 幾個數組可以沿不同的軸堆疊在一起
>>> a = np.floor(10*np.random.random((2,2))) >>> a array([[5., 7.],[6., 0.]])>>> b = np.floor(10*np.random.random((2,2))) >>> b array([[1., 5.],[1., 5.]])>>> np.vstack((a,b)) # v 垂向疊加 array([[5., 7.],[6., 0.],[1., 5.],[1., 5.]])>>> np.hstack((b,a)) # h 水平疊加 array([[1., 5., 5., 7.],[1., 5., 6., 0.]])
  • 函數 column_stack 將1D數組作為疊加到2D數組中。它相當于僅用于二維數組的 hstack
>>> from numpy import newaxis >>> np.column_stack((a,b)) array([[5., 7., 1., 5.],[6., 0., 1., 5.]])>>> a = np.array([4,2]) >>> b = np.array([3,9])>>> np.column_stack((a,b)) array([[4, 3], # a、b 作為 列 向量[2, 9]])>>> np.hstack((a,b)) array([4, 2, 3, 9])>>> a[:,newaxis] # 加入新的軸 array([[4],[2]])>>> np.column_stack((a[:,newaxis],b[:,newaxis])) array([[4, 3],[2, 9]]) >>> np.hstack((a[:,newaxis],b[:,newaxis])) #兩者結果一樣 array([[4, 3],[2, 9]])
  • 函數 row_stack 相當于 vstack。一般來說,對于具有兩個以上維度的數組,hstack 沿第二軸堆疊,vstack 沿第一軸堆疊,concatenate 允許一個可選參數,給出串接應該發生的軸。

在復雜情況下,r_ 和 c_ 可用于通過沿一個軸疊加數字來創建數組。它們允許使用范圍字面量(“:”)

>>> np.r_[1:5,8,9] array([1, 2, 3, 4, 8, 9])>>> np.c_[1:3,[8,9], [10,11]] array([[ 1, 8, 10],[ 2, 9, 11]])

3. 將一個數組分成幾個較小的數組

  • 使用 hsplit ,可沿水平軸拆分,通過指定要返回的均勻劃分的數組數量,或指定要在其后進行劃分的列
>>> a = np.floor(10*np.random.random((2,12))) >>> a array([[8., 9., 8., 8., 9., 9., 3., 6., 2., 3., 3., 1.],[2., 5., 8., 5., 9., 2., 1., 3., 6., 1., 6., 8.]]) >>> np.hsplit(a,3) # 將 a 分成3份 [array([[8., 9., 8., 8.],[2., 5., 8., 5.]]), array([[9., 9., 3., 6.],[9., 2., 1., 3.]]), array([[2., 3., 3., 1.],[6., 1., 6., 8.]])] >>> np.hsplit(a,(3,4)) [array([[8., 9., 8.],[2., 5., 8.]]), array([[8.],[5.]]), array([[9., 9., 3., 6., 2., 3., 3., 1.],[9., 2., 1., 3., 6., 1., 6., 8.]])] >>> np.hsplit(a,(3,5)) # 把3,4列劃出來 [array([[8., 9., 8.],[2., 5., 8.]]), array([[8., 9.],[5., 9.]]), array([[9., 3., 6., 2., 3., 3., 1.],[2., 1., 3., 6., 1., 6., 8.]])]

  • vsplit 沿縱軸分割,并且 array_split 允許指定沿哪個軸分割。
>>> a array([[8., 9., 8., 8., 9., 9.],[3., 6., 2., 3., 3., 1.],[2., 5., 8., 5., 9., 2.],[1., 3., 6., 1., 6., 8.]]) >>> np.vsplit(a,(2,4)) # 把2,3行劃出來 [array([[8., 9., 8., 8., 9., 9.],[3., 6., 2., 3., 3., 1.]]), array([[2., 5., 8., 5., 9., 2.],[1., 3., 6., 1., 6., 8.]]), array([], shape=(0, 6), dtype=float64)] >>> np.vsplit(a,(2,3)) # 把2行劃出來 [array([[8., 9., 8., 8., 9., 9.],[3., 6., 2., 3., 3., 1.]]), array([[2., 5., 8., 5., 9., 2.]]), array([[1., 3., 6., 1., 6., 8.]])]

總結

以上是生活随笔為你收集整理的NumPy快速入门--形状操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。