1. 程式人生 > 實用技巧 >numpy的random與基本計算

numpy的random與基本計算

  • Random 產生,隨機數
    • 引數(並不是所有方法都含有以下全部引數,具體根據使用方法而定)
引數 說明
start 隨機範圍的下邊界
end 隨機範圍的上邊界
size 隨機結果的形態
dtype 隨機結果的型別
def random():
    # numpy.random.randint(start, end, size, dtype=None)
    # 隨機生成元素區間 [1, 100) 且元素個數為 12 的int64型別陣列
    arr1 = np.random.randint(1, 100, 12, dtype=np.int64)
    
# 更改陣列形狀為 3*4 # arr1: [ [72 83 38 32] # [12 36 17 92] # [19 34 57 20] ] arr1 = arr1.reshape(3, 4) # numpy.random.random(size) # 生成位於區間 [0, 1)之間返回隨機浮點數 # arr2: [0.480343 0.84162194 0.52011533 0.71096837 0.67357815 0.94794846] arr2 = np.random.random(6) # 生成 3*2 的隨機陣列
# arr3: [ [0.00876662 0.09294199 0.23165923] # [0.47272696 0.83836171 0.11378513] ] arr3 = np.random.random(size=(2, 3)) # numpy.random.shuffle(x) # 隨機打亂原來的陣列 arr4 = np.arange(0, 6, 1) # arr4: [2 0 4 3 5 1] np.random.shuffle(arr4) # 打亂以第一個索引為標準,即:一維陣列arr[],打亂元素;二維陣列arr[],打亂行,以此類推
arr5 = np.arange(0, 6, 1).reshape(2, 3) # arr5: [ [3 4 5] # [0 1 2] ] np.random.shuffle(arr5)
  • 轉置,矩陣乘法,陣列加減乘法,截斷
    • np.transpose(arr) 或 arr.T , arr的轉置
    • np.dot(arr1, arr2) 或 arr1@arr2 , 矩陣乘法
    • arr.clip(low, high) ,截斷
    • arr1+arr2
# 陣列的加減乘,矩陣乘法,轉置,截斷
def operation1():
    # 生成二維陣列 a
    a = np.array([
        [1, 5],
        [4, 6]
    ], dtype=np.int)

    # 矩陣的轉置,也可以 np.transpose(a)
    #  [ [1 4]
    #    [5 6] ]
    print("轉置矩陣:\n", a.T)

    # A的轉置乘以A
    #  [ [17 29]
    #    [29 61] ]
    print("實對稱矩陣:\n", np.dot(a.T, a))
    # A的轉置乘以A
    print("a@a:\n", a.T @ a)

    # clip截斷,這是指先把所有小於3的元素變3,再把所有大於5的元素變5
    #  [ [3 5]
    #    [4 5] ]
    print("clip:\n", a.clip(3, 5))

    # 全部為3,先把所有小於6的變6,再把所有大於3的變3
    #  [ [3 3]
    #    [3 3] ]
    print("clip:\n", a.clip(6, 3))

    # b = np.array([
    #       [2, 3],
    #       [4, 5]
    # ])
    b = np.arange(2, 6, 1, dtype=np.int).reshape(2, 2)

    # 進行陣列的加減運算,對應元素進行加減運算
    #  [ [ 3  8]
    #    [ 8 11] ]
    print("a+b:\n", a + b)

    #  [ [-1  2]
    #    [ 0  1] ]
    print("a-b:\n", a - b)

    # 陣列a進行自乘,對應元素自乘
    #  [ [ 1 25]
    #    [16 36] ]
    print("a**2:\n", a ** 2)

    # 陣列a與b相乘,對應元素相乘,注意這裡不是矩陣乘法
    #  [ [ 2 15]
    #    [16 30] ]
    print("a*b:\n", a * b)
  • 陣列元素求和,按行、按列,最大、最小、平均值、中位數等
方法 說明
sum 所有元素求和
max 最大值
min 最小值
mean 平均值
median 中位數
cumsum 累加求和
argmax 最大值索引
# 陣列元素求和,按行、按列,最大、最小、平均值、中位數等
def operation2():
    arr = np.array([
        [1, 3, 5],
        [2, 4, 6]
    ])
    # arr本身就是np生成的物件,可以用np的sum方法
    # 21
    print("元素求和:", arr.sum())

    # 使用np呼叫方法也行, 對於二維陣列來說,引數axis=0 對每一列求和,axis=1 對每一行求和
    # axis 按維度軸方向求和
    # [3 7 11]
    print("元素按列求和:", np.sum(arr, axis=0))

    # 其它也同理,可用np呼叫,或者物件呼叫,求解每行的最小值
    # [1 2]
    print("最小值:", np.min(arr, axis=1))

    # 求最大值
    # 6
    print("最大值:", np.max(arr))

    # 平均值
    # 3.5
    print("平均值:", np.mean(arr))

    # 中位數
    # 3.5
    print("中位數:", np.median(arr))

    # 累加求和
    # [1 4 9 11 15 21]
    print("累加求和:", np.cumsum(arr))

    # 所有元素最大值的索引,從0開始,如 2行3列的元素,索引為 0~5
    # 5
    print("最大元素索引:", arr.argmax())