ndarray對象的使用方法


ndarray的基本操作

1.索引

基本索引:一維與list完全一致 多維同理

例如:
import numpy
ndarr1 = numpy.random.randint(0,10.size=5)
ndarr1[0] # 取數組中的第一個值, 以此類推
ndarr1[1] 
ndarr1[-1]

高級索引:整數數組形式的索引

例如:
nd = np.random.randint(0,10,size=(5,6))
nd
array([[0,
4, 7, 5, 9, 7], [5, 3, 2, 9, 5, 5], [9, 2, 6, 2, 7, 7], [0, 3, 5, 4, 3, 9], [9, 1, 9, 7, 1, 3]]) nd[0][0] # 普通的索引 # 整數數組索引 nd[0,0] nd[-1,0] nd[-1,] # 往里一個維度 要同時 取出 0 2 4 nd[-1,[0,2,4]] nd[-1,[4,2,0]] # 順序任意 可以正向取 也可以反向取 還可以隨便取 而且可以重復取 nd[-1,[2,4,0]] nd[-1,[2,4,0,0,0,0]]

2.切片

一維與列表切片完全一致 多維時同理

例如:
ndarr = np.random.randint(0,10,size=5)
ndarr
array([8, 6, 5, 3, 6])
ndarr[1:4]
ndarr[0:4]
ndarr[:4]
ndarr[:]

而且ndarray還支持用,一級一級往里找

ndarr[:2]
# 切片也是 從外往里 一級一級切
ndarr[:,0:2]
ndarr[1:3,1:4]
ndarr[1:3,1:-1]

使用兩個:: 的形式 進行切片和翻轉

例如:
nd = np.random.randint(0,10,size=9)
nd
array([0, 0, 4, 9, 0, 3, 8, 6, 5])
nd[1:-1:2]  # start:stop:step
nd[::-1]
nd[::-2]

3.變形

使用reshape函數,注意參數是一個tuple!

nd = np.random.randint(0,10,size=(4,5))  
nd
array([[2, 5, 0, 9, 6],
       [0, 1, 3, 3, 8],
       [5, 3, 9, 7, 8],
       [6, 0, 9, 8, 8]])
nd.size
20


nd.reshape((5,4))  # 形狀可以任意改變 但是size不能變化
nd.reshape((10,2))
nd.reshape((2,10))
# nd.reshape((5,5))  # 25
nd.reshape((20,1))
nd.reshape((-1,1))  # -1指的是自動計算的意思
nd.reshape((1,20))
nd.reshape((1,-1))

4.連結

np.concatenate()

連結需要注意的點:

  • 連結的參數是列表:一定要加小括號
  • 必須 維度相同 形狀相符
  • 連結的方向默認是shape這個tuple的第一個值所代表的維度方向
  • 可通過axis參數改變連結的方向 
# 第一個參數 以元組的形式 傳入要拼接的多個ndarr
np.concatenate((nd,nd))  # 默認按照縱向拼接
# 第二個參數 axis 用來指定 拼接方向
# np.concatenate((nd,nd),axis=0)
# np.concatenate((nd,nd),axis=1)
# np.concatenate((nd,nd),axis=-1)  # -1是最里層
np.concatenate((nd,nd),axis=-2)  #

5.切分

與級聯類似,三個函數完成切分工作:

  • np.split 默認是axis=0
  • np.vsplit 橫向切 與axis=0相同
  • np.hsplit 縱向切 與axis=1相同
  • 返回值是一個列表
# ary, indices_or_sections, axis=0
# ary 要切分的數組
# indices_or_sections 用來指定 分成幾份 或者 從哪里分
# axis 用來指定切分的方向
np.split()

6.副本

所有賦值運算不會為ndarray的任何元素創建副本。對賦值后的對象操作也會影響原數組。

可使用copy()函數創建副本,類似於python中的deepcopy

# 對於ndarray對象 凡是涉及到復制后改變 又不希望影響原數組的 都用copy (這是最保險的)
nd2 = nd.copy()  # 深層copy

ndarray的聚合操作

1.求和numpy.sum()

2. 最大最小值:numpy.max/ np.min

3. 其他聚合操作

Function Name    NaN-safe Version    Description
np.sum    np.nansum    Compute sum of elements 所有元素的和
np.prod    np.nanprod    Compute product of elements 所有元素的乘積
np.mean    np.nanmean    Compute mean of elements
np.std    np.nanstd    Compute standard deviation
np.min    np.nanmin    Find minimum value
np.max    np.nanmax    Find maximum value
np.argmin    np.nanargmin    Find index of minimum value
np.argmax    np.nanargmax    Find index of maximum value
np.any    N/A    Evaluate whether any elements are true
np.all    N/A    Evaluate whether all elements are true

ndarray的矩陣操作

1.基本矩陣操作

1) 算術運算符:

  • 加減乘除
    ndarr = np.random.randint(0,10,size=(4,5))
    ndarr
    array([[4, 5, 8, 3, 0],
           [9, 4, 4, 1, 5],
           [9, 6, 4, 0, 1],
           [6, 1, 6, 4, 9]])
    ndarr+1 ...
    ndarr-1 ...
    ndarr*2
    array([[ 8, 10, 16,  6,  0],
           [18,  8,  8,  2, 10],
           [18, 12,  8,  0,  2],
           [12,  2, 12,  8, 18]])

2) 矩陣積np.dot()

ndarr
array([[4, 5, 8, 3, 0],
       [9, 4, 4, 1, 5],
       [9, 6, 4, 0, 1],
       [6, 1, 6, 4, 9]])
# 矩陣的點積
# A矩陣 和 B矩陣 做點積
# A矩陣是m行n列的矩陣
# B矩陣是i行j列的矩陣
# B的行數必須得等於A的列數 i要等於n
# 結果是一個 m行 j列的一個矩陣
ndarr2 = np.random.randint(0,10,size=(5,2))
ndarr2 
array([[4, 4],
       [0, 9],
       [0, 8],
       [1, 5],
       [6, 2]])
np.dot(ndarr,ndarr2)
array([[ 19, 140],
       [ 67, 119],
       [ 42, 124],
       [ 82, 119]])

2.廣播機制

ndarray的排序

1.快速排序

np.sort()與ndarray.sort()都可以,但有區別:

  • np.sort(ndarray) 不改變輸入
  • ndarray.sort() 本地處理,不占用空間,但改變輸入

2.部分排序

np.partition(a,k)

有的時候我們不是對全部數據感興趣,我們可能只對最小或最大的一部分感興趣。

  • 當k為正時,我們想要得到最小的k個數
  • 當k為負時,我們想要得到最大的k個數
示例:
nd = np.random.randint(0,100,size=15)
ndarr = np.random.randint(0,100,size=15)
ndarr
array([83, 57, 43, 83, 95, 73, 95,  7, 46, 26, 86, 47, 59, 45, 64])
# 10個數據庫 里面分別有10000商品
# 計算銷量最大的前三個
# a, kth a是要排序的數組 kth是要找最大的幾個
# np.partition(ndarr,3)  # k是3 表示尋找 最小的3個
# np.partition(ndarr,5)  # 順序可能是沒有排好的 但是最前面的5個一定是最小的5個
np.partition(ndarr,-5)
np.partition(ndarr,-4)
array([46,  7, 43, 45, 59, 47, 26, 57, 64, 73, 83, 83, 95, 86, 95])

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM