科學計算庫——Numpy基礎

文章目錄

第一部分 爲什麼要用Numpy

1.1 低效的Python for循環

  • 【例】 求100萬個數的倒數
def compute_reciprocals(values):
    res = []
    for value in values:      # 每遍歷到一個元素,就要判斷其類型,並查找適用於該數據類型的正確函數
        res.append(1/value)
    return res
​
​
values = list(range(1, 1000000))
%timeit compute_reciprocals(values)
100 ms ± 822 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
  • %timeit :ipython中統計運行時間的魔術方法(多次運行取平均值)
import numpy as np
​
values = np.arange(1, 1000000)
%timeit 1/values    
4.28 ms ± 285 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
  • 實現相同計算,Numpy的運行速度是Python循環的25倍,產生了質的飛躍

1.2 Numpy爲什麼如此高效

  • Numpy 是由C語言編寫的
  1. 編譯型語言VS解釋型語言
    C語言執行時,對代碼進行整體編譯,速度更快。
  2. 連續單一類型存儲VS分散多變類型存儲
    (1)Numpy數組內的數據類型必須是統一的,如全部是浮點型,而Python列表支持任意類型數據的填充。
    (2)Numpy數組內的數據連續存儲在內存中,而Python列表的數據分散在內存中。
    這種存儲結構,與一些更加高效的底層處理方式更加的契合。
  3. 多線程VS線程鎖
    Python語言執行時有線程鎖,無法實現真正的多線程並行,而C語言可以。

1.3 什麼時候用Numpy

  • 在數據處理的過程中,遇到使用“Python for循環” 實現一些向量化、矩陣化操作的時候,要優先考慮用Numpy。
  • 如:兩個向量的點乘、矩陣乘法

第二部分 Numpy數組的創建

2.1 從列表開始創建

import numpy as np
​
x = np.array([1, 2, 3, 4, 5])
print(x)
print(type(x))
print(x.shape)
[1 2 3 4 5]
<class 'numpy.ndarray'>
(5,)

設置數組的數據類型

import numpy as np

x = np.array([1, 2, 3, 4, 5], dtype="float32")
print(x)
print(type(x[0]))
[1. 2. 3. 4. 5.]
<class 'numpy.float32'>

二維數組

import numpy as np

x = np.array([[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]])
print(x)
print(x.shape)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
(3, 3)

2.2 從頭創建數組

2.2.1 np.zeros 創建值都爲0的數組

import numpy as np

print(np.zeros(5, dtype=int))
[0 0 0 0 0]

2.2.2 np.ones 創建一個值都爲1的數組

import numpy as np

print(np.ones((2, 4), dtype=float))
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]]

2.2.3 np.full 創建一個值都爲指定數字的數組

import numpy as np

print(np.full((3, 5), 8.8))
[[8.8 8.8 8.8 8.8 8.8]
 [8.8 8.8 8.8 8.8 8.8]
 [8.8 8.8 8.8 8.8 8.8]]

2.2.4 np.eye 創建一個單位矩陣

import numpy as np

print(np.eye(3))
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

2.2.5 np.arange 創建一個線性序列數組

import numpy as np

print(np.arange(1, 15, 2))    # 從1開始,到15結束,步長爲2
[ 1  3  5  7  9 11 13]

2.2.6 np.linspace 創建一個等差數列

import numpy as np

print(np.linspace(0, 1, 4))    # 四個數均勻的分配到0~1
[0.         0.33333333 0.66666667 1.        ]

2.2.7 np.logspace 創建一個等比數列

import numpy as np

print(np.logspace(0, 9, 10))    # 10個元素形成10^0~10^9的等比數列
[1.e+00 1.e+01 1.e+02 1.e+03 1.e+04 1.e+05 1.e+06 1.e+07 1.e+08 1.e+09]

2.2.8 np.random.random 創建一個在0~1之間均勻分佈的隨機數構成的數組

import numpy as np

print(np.random.random((3,3)))
[[0.43103112 0.90163353 0.97183695]
 [0.11083239 0.10790603 0.25855347]
 [0.58590392 0.49101639 0.43734257]]

2.2.9 np.random.rand 創建一個在0~1之間均勻分佈的隨機數構成的數組

import numpy as np

print(np.random.rand(3,3))
[[0.43103112 0.90163353 0.97183695]
 [0.11083239 0.10790603 0.25855347]
 [0.58590392 0.49101639 0.43734257]]

2.2.10 np.random.normal 創建一個正態分佈隨機數構成的數組

import numpy as np

print(np.random.normal(0, 1, (3,3)))    # 形狀3*3,均值爲0,標準差爲1
[[ 0.71657085  0.2826025  -0.34395535]
 [ 0.16207986  0.33397837 -0.16482997]
 [-0.50180039 -1.18629584  0.17830969]]

2.2.11 np.random.randn 創建一個標準正態分佈隨機數構成的數組

import numpy as np

print(np.random.randn(3,3))    # 等價於np.random.normal(0, 1, (3,3))
[[ 0.08651861 -0.24051704  0.70060128]
 [-1.20089869  0.835285    0.47519735]
 [-1.41045256  0.50119295 -1.46519798]]

2.2.12 np.random.randint 創建隨機整數構成的數組

import numpy as np

print(np.random.randint(0, 10, (3,3)))    # 形狀3*3,在[0,10)之間
print(np.random.randint(10, size=(3,3)))
[[2 9 8]
 [5 4 8]
 [8 8 3]]
[[1 4 0]
 [5 9 2]
 [4 0 1]]

2.2.13 隨機重排列

np.random.permutation 產生新列表

np.random.shuffle 修改原列表

import numpy as np

x = np.array([10, 20, 30, 40])
print(np.random.permutation(x))      # 產生新列表
print(x)
np.random.shuffle(x)          # 修改原列表
print(x)
[30 10 40 20]
[10 20 30 40]
[10 30 20 40]

2.2.14 np.random.choice 按指定形狀隨機採樣,可指定概率

import numpy as np

x = np.arange(10, 25, dtype = float)
print(x)
print(np.random.choice(x, size=(4, 3)))
print(np.random.choice(10, 5))    # 在0到9中採樣5次
print(np.random.choice(x, 5, p=x/np.sum(x)))    # 指定概率
[10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.]
[[22. 11. 21.]
 [19. 15. 18.]
 [11. 10. 11.]
 [22. 14. 24.]]
[8 7 0 5 4]
[23. 11. 15. 17. 22.]

第三部分 Numpy數組的性質

3.1 數組的屬性

數組的形狀 shape

數組的維度 ndim

數組的大小 size

數組的數據類型 dtype

import numpy as np

x = np.random.randint(10, size=(3, 4))
print(x)
print(x.shape)
print(x.ndim)
y = np.arange(10)
print(y.ndim)
print(x.size)
print(x.dtype)
[[3 0 9 7]
 [2 1 1 8]
 [0 5 8 3]]
(3, 4)
2
1
12
int32

3.2 數組的索引

3.2.1 一維數組的索引——與列表一樣

import numpy as np

x1 = np.arange(10)
print(x1)
print(x1[0])
print(x1[-1])
[0 1 2 3 4 5 6 7 8 9]
0
9

3.2.2 多維數組的索引——以二維爲例

import numpy as np

x2 = np.random.randint(0, 20, (2,3))
print(x2)
print(x2[0, 0])
print(x2[0][0])

x2[0, 0] = 1.618
print(x2)
[[11  8  9]
 [ 8  7  0]]
11
11
[[1 8 9]
 [8 7 0]]

注意: numpy數組的數據類型是固定的,向一個整型數組插入一個浮點值,浮點值會向下進行取整

3.3 數組的切片

3.3.1 一維數組——跟列表一樣

import numpy as np

x1 = np.arange(10)
print(x1)
print(x1[:3])
print(x1[3:])
print(x1[::-1])
[0 1 2 3 4 5 6 7 8 9]
[0 1 2]
[3 4 5 6 7 8 9]
[9 8 7 6 5 4 3 2 1 0]

3.3.2 多維數組——以二維爲例

import numpy as np

x2 = np.random.randint(20, size=(3,4)) 
print(x2)
print(x2[:2, :3])             # 前兩行,前三列
print(x2[:2, 0:3:2])       # 前兩行 前三列(每隔一列)
print(x2[::-1, ::-1])
[[ 9 15 17  8]
 [ 9 16  5 15]
 [ 5  5 15 13]]
[[ 9 15 17]
 [ 9 16  5]]
[[ 9 17]
 [ 9  5]]
[[13 15  5  5]
 [15  5 16  9]
 [ 8 17 15  9]]

3.3.3 獲取數組的行和列

import numpy as np

x3 = np.random.randint(20, size=(3,4)) 
print(x3)
print(x3[1, :])   #第一行  從0開始計數
print(x3[1])    # 第一行簡寫
print(x3[:, 2])  # 第二列   從0開始計數
[[18 11 14  1]
 [14 12  0 12]
 [ 6  9 11 13]]
[14 12  0 12]
[14 12  0 12]
[14  0 11]

3.3.4 切片獲取的是視圖,而非副本

import numpy as np

x4 = np.random.randint(20, size=(3,4)) 
print(x4)
x5 = x4[:2, :2]
print(x5)
x5[0, 0] = 0
print(x5)
print(x4)
[[ 3 19  9  0]
 [17  3  8 16]
 [11 19  2  5]]
[[ 3 19]
 [17  3]]
[[ 0 19]
 [17  3]]
[[ 0 19  9  0]
 [17  3  8 16]
 [11 19  2  5]]

注意: 視圖元素髮生修改,則原數組亦發生相應修改

修改切片的安全方式:copy()

import numpy as np

x4 = np.random.randint(20, size=(3,4)) 
print(x4)
x6 = x4[:2, :2].copy()
print(x6)
x6[0, 0] = 0
print(x6)
print(x4)
[[15 15 13 17]
 [16 13 14  6]
 [ 6 18  3 15]]
[[15 15]
 [16 13]]
[[ 0 15]
 [16 13]]
[[15 15 13 17]
 [16 13 14  6]
 [ 6 18  3 15]]

3.4 數組的變形

3.4.1 reshape——視圖

import numpy as np

x5 = np.random.randint(0, 10, (12,))
print(x5)
x6 = x5.reshape(3, 4)
print(x6)
x6[0, 0] = 0
print(x5)
[1 2 6 7 9 3 3 9 4 7 5 6]
[[1 2 6 7]
 [9 3 3 9]
 [4 7 5 6]]
[0 2 6 7 9 3 3 9 4 7 5 6]

3.4.2 一維向量轉行向量 reshape、np.newaxis——視圖

import numpy as np

x5 = np.random.randint(0, 10, (12,))
print(x5)
x7 = x5.reshape(1, x5.shape[0])    
print(x7)
x8 = x5[np.newaxis, :]
print(x8)
[8 8 8 4 8 1 3 9 1 8 0 2]
[[8 8 8 4 8 1 3 9 1 8 0 2]]
[[8 8 8 4 8 1 3 9 1 8 0 2]]

3.4.3 一維向量轉列向量 reshape、np.newaxis——視圖

import numpy as np

x5 = np.random.randint(0, 10, (5,))
print(x5)
x7 = x5.reshape(x5.shape[0], 1)    
print(x7)
x8 = x5[:, np.newaxis]
print(x8)
[8 8 4 5 6]
[[8]
 [8]
 [4]
 [5]
 [6]]
[[8]
 [8]
 [4]
 [5]
 [6]]

3.4.4 多維向量轉一維向量

flatten()——副本

import numpy as np

x6 = np.random.randint(0, 10, (3, 4))
print(x6)
x9 = x6.flatten()
print(x9)
[[9 3 2 6]
 [9 0 6 2]
 [3 9 7 8]]
[9 3 2 6 9 0 6 2 3 9 7 8]

ravel()——視圖

import numpy as np

x6 = np.random.randint(0, 10, (3, 4))
print(x6)
x10 = x6.ravel()
print(x10)
[[4 5 1 9]
 [2 5 3 0]
 [4 5 5 2]]
[4 5 1 9 2 5 3 0 4 5 5 2]

reshape(-1)——視圖

import numpy as np

x6 = np.random.randint(0, 10, (3, 4))
print(x6)
x11 = x6.reshape(-1)
print(x11)
[[8 2 4 5]
 [0 3 3 7]
 [7 5 0 7]]
[8 2 4 5 0 3 3 7 7 5 0 7]

3.5 數組的拼接

3.5.1 水平拼接 np.hstack([x1, x2])、np.c_[x1, x2]——副本

import numpy as np

x1 = np.array([[1, 2, 3],
              [4, 5, 6]])
x2 = np.array([[7, 8, 9],
              [0, 1, 2]])

x3 = np.hstack([x1, x2])
print(x3)

x4 = np.c_[x1, x2]
print(x4)
[[1 2 3 7 8 9]
 [4 5 6 0 1 2]]
[[1 2 3 7 8 9]
 [4 5 6 0 1 2]]

3.5.2 垂直拼接np.vstack([x1, x2])、np.r_[x1, x2]——副本

import numpy as np

x1 = np.array([[1, 2, 3],
              [4, 5, 6]])
x2 = np.array([[7, 8, 9],
              [0, 1, 2]])

x5 = np.vstack([x1, x2])
print(x5)

x6 = np.r_[x1, x2]
print(x6)
[[1 2 3]
 [4 5 6]
 [7 8 9]
 [0 1 2]]
[[1 2 3]
 [4 5 6]
 [7 8 9]
 [0 1 2]]

3.6 數組的分割

3.6.1 split的用法——視圖

import numpy as np

x6 = np.arange(10)
print(x6)

x1, x2, x3 = np.split(x6, [2, 7])
print(x1, x2, x3)
[0 1 2 3 4 5 6 7 8 9]
[0 1] [2 3 4 5 6] [7 8 9]

3.6.2 hsplit的用法——視圖

import numpy as np

x7 = np.arange(1, 16).reshape(3, 5)
print(x7)

left, middle, right = np.hsplit(x7, [2,4])
print("left:\n", left)            # 第0~1列
print("middle:\n", middle)        # 第2~3列
print("right:\n", right)          # 第4列
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]]
left:
 [[ 1  2]
 [ 6  7]
 [11 12]]
middle:
 [[ 3  4]
 [ 8  9]
 [13 14]]
right:
 [[ 5]
 [10]
 [15]]

3.6.3 vsplit的用法——視圖

import numpy as np

x7 = np.arange(1, 16).reshape(5, 3)
print(x7)

upper, middle, lower = np.vsplit(x7, [2,4])
print("upper:\n", upper)         # 第0~1行
print("middle:\n", middle)       # 第2~3行
print("lower:\n", lower)         # 第4行
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]
 [13 14 15]]
upper:
 [[1 2 3]
 [4 5 6]]
middle:
 [[ 7  8  9]
 [10 11 12]]
lower:
 [[13 14 15]]

3.7 根據索引數組生成數組——副本

3.7.1 一維數組

import numpy as np

x = np.random.randint(100, size=10)
print(x)

ind = [2, 6, 9]
print(x[ind])

ind = np.array([[1, 0],
               [2, 3]])
print(x[ind])
[72 74 19 52 14 98 22 67 52 99]
[19 22 99]
[[74 72]
 [19 52]]

3.7.2 多維數組

import numpy as np

x = np.arange(12).reshape(3, 4)
print(x)

row = np.array([0, 1, 2])
col = np.array([1, 3, 0])
print(x[row, col])               # x(0, 1) x(1, 3) x(2, 0)

print(row[:, np.newaxis])       # 列向量

print(x[row[:, np.newaxis], col])    # 廣播機制
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[1 7 8]
[[0]
 [1]
 [2]]
[[ 1  3  0]
 [ 5  7  4]
 [ 9 11  8]]

第四部分 Numpy四大運算

4.1 向量運算

4.1.1 與數字的加減乘除等

import numpy as np

x1 = np.arange(1,6)
print(x1)

print("x1+5", x1+5)
print("x1-5", x1-5)
print("x1*5", x1*5)
print("x1/5", x1/5)

print("-x1", -x1)
print("x1**2", x1**2)
print("x1//2", x1//2)
print("x1%2", x1%2)
[1 2 3 4 5]
x1+5 [ 6  7  8  9 10]
x1-5 [-4 -3 -2 -1  0]
x1*5 [ 5 10 15 20 25]
x1/5 [0.2 0.4 0.6 0.8 1. ]
-x1 [-1 -2 -3 -4 -5]
x1**2 [ 1  4  9 16 25]
x1//2 [0 1 1 2 2]
x1%2 [1 0 1 0 1]

4.1.2 絕對值、三角函數、指數、對數

絕對值 abs、np.abs

import numpy as np

x2 = np.array([1, -1, 2, -2, 0])
print(x2)

print(abs(x2))
print(np.abs(x2))
[ 1 -1  2 -2  0]
[1 1 2 2 0]
[1 1 2 2 0]

三角函數 np.sin、np.cos、np.tan、np.arcsin、np.arccos、np.arctan

import numpy as np

theta = np.linspace(0, np.pi, 3)
print(theta)

print("sin(theta)", np.sin(theta))
print("cos(theta)", np.cos(theta))
print("tan(theta)", np.tan(theta))

x = [1, 0 ,-1]
print("arcsin(x)", np.arcsin(x))
print("arccon(x)", np.arccos(x))
print("arctan(x)", np.arctan(x))
[0.         1.57079633 3.14159265]
sin(theta) [0.0000000e+00 1.0000000e+00 1.2246468e-16]
cos(theta) [ 1.000000e+00  6.123234e-17 -1.000000e+00]
tan(theta) [ 0.00000000e+00  1.63312394e+16 -1.22464680e-16]
arcsin(x) [ 1.57079633  0.         -1.57079633]
arccon(x) [0.         1.57079633 3.14159265]
arctan(x) [ 0.78539816  0.         -0.78539816]

指數運算 np.exp

import numpy as np

x = np.arange(3)
print(x)
print(np.exp(x))

對數運算 np.log、np.log2、np.log10

import numpy as np

x = np.array([1, 2, 4, 8 ,10])
print("ln(x)", np.log(x))
print("log2(x)", np.log2(x))
print("log10(x)", np.log10(x))
ln(x) [0.         0.69314718 1.38629436 2.07944154 2.30258509]
log2(x) [0.         1.         2.         3.         3.32192809]
log10(x) [0.         0.30103    0.60205999 0.90308999 1.        ]

4.1.3 兩個數組的運算——對應位置元素分別運算

import numpy as np

x1 = np.arange(1,6)
print(x1)

x2 = np.arange(6,11)
print(x2)

print("x1+x2:", x1+x2)
print("x1-x2:", x1-x2)
print("x1*x2:", x1*x2)
print("x1/x2:", x1/x2)
[1 2 3 4 5]
[ 6  7  8  9 10]
x1+x2: [ 7  9 11 13 15]
x1-x2: [-5 -5 -5 -5 -5]
x1*x2: [ 6 14 24 36 50]
x1/x2: [0.16666667 0.28571429 0.375      0.44444444 0.5       ]

4.2 矩陣運算

4.2.1 矩陣的轉置 x.T——視圖

import numpy as np

x = np.arange(9).reshape(3, 3)
print(x)

y = x.T
print(y)
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[0 3 6]
 [1 4 7]
 [2 5 8]]

4.2.2 矩陣乘法 x.dot(y)、np.dot(x, y)

import numpy as np

x = np.array([[1, 0],
             [1, 1]])
y = np.array([[0, 1],
             [1, 1]])

print(x.dot(y))
print(np.dot(x, y))

print(x*y)
[[0 1]
 [1 2]]
[[0 1]
 [1 2]]
[[0 0]
 [1 1]]
  • 注意跟x * y的區別,x * y是對應位置元素相乘

4.3 廣播運算

  • 規則
    如果兩個數組的形狀在維度上不匹配
    那麼數組的形式會沿着維度爲1的維度進行擴展以匹配另一個數組的形狀。
import numpy as np

x = np.arange(3).reshape(1, 3)
print(x)
print(x+5)    # 先把5擴展成1×3的形狀,再相加
[[0 1 2]]
[[5 6 7]]
import numpy as np

x1 = np.ones((3,3))
print(x1)

x2 = np.arange(3).reshape(1, 3)
print(x2)

print(x1+x2)    # 先把1×3擴展成3×3的形狀,再相加
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
[[0 1 2]]
[[1. 2. 3.]
 [1. 2. 3.]
 [1. 2. 3.]]
import numpy as np

x5 = np.arange(3).reshape(3, 1)
print(x5)

x6 = np.arange(3).reshape(1, 3)
print(x6)

print(x5+x6)    # 分別擴展成3×3的形狀,再相加
[[0]
 [1]
 [2]]
[[0 1 2]]
[[0 1 2]
 [1 2 3]
 [2 3 4]]

4.4 比較運算和掩碼——邏輯運算要用 & 而不能用 and !!!

4.4.1 比較運算

import numpy as np

x1 = np.random.randint(100, size=(3,3))
print(x1)
print(x1 > 50)
[[38 38 79]
 [ 3 54 97]
 [23 31 19]]
[[False False  True]
 [False  True  True]
 [False False False]]

4.4.2 操作布爾數組 np.sum(統計個數)、np.all、np.any

import numpy as np

x2 = np.random.randint(10, size=(3, 4))
print(x2)

print(x2 > 5)
print(np.sum(x2 > 5))    # 大於5的元素有幾個
print(np.all(x2 > 0))    # 所有都滿足條件
print(np.any(x2 == 6))    # 至少一個滿足條件
print((x2 < 9, axis=1).all())   # 每行的元素是否都小於9,axis=0爲按列
print((x2 < 9) & (x2 >5))

print(((x2 < 9) & (x2 >5)).sum())    # 加入邏輯運算
[[8 3 9 3]
 [3 3 8 1]
 [9 2 8 8]]
[[ True False  True False]
 [False False  True False]
 [ True False  True  True]]
6
True
False
[False  True False]
[[ True False False False]
 [False False  True False]
 [False False  True  True]]
4

4.4.2 將布爾數組作爲掩碼——副本

import numpy as np

x2 = np.random.randint(10, size=(3, 4))
print(x2)
print(x2 > 5)
print(x2[x2 > 5])
[[8 9 2 1]
 [1 6 1 4]
 [1 2 0 9]]
[[ True  True False False]
 [False  True False False]
 [False False False  True]]
[8 9 6 9]

第五部分 其他Numpy通用函數

5.1 數值排序 np.sort(x)、x.sort()

import numpy as np

x = np.random.randint(20, 50, size=10)
print(x)

print(np.sort(x))    # 產生新的排序數組
print(x)

x.sort()    # 替換原數組
print(x)
[44 20 21 41 35 44 32 45 29 28]
[20 21 28 29 32 35 41 44 44 45]
[44 20 21 41 35 44 32 45 29 28]
[20 21 28 29 32 35 41 44 44 45]

獲得排序索引 np.argsort(x)、x.argsort()

import numpy as np

x = np.random.randint(20, 50, size=10)
print(x)
i = np.argsort(x)
print(i)
print(x.argsort())
[20 47 24 26 24 44 44 41 40 36]
[0 2 4 3 9 8 7 5 6 1]
[0 2 4 3 9 8 7 5 6 1]

5.2 最大最小值及索引

import numpy as np

x = np.random.randint(20, 50, size=10)
print(x)

print("max:", np.max(x))
print("min:", x.min())

print("max_index:", x.argmax())
print("min_index:", np.argmin(x))
[26 48 24 29 35 23 47 37 46 26]
max: 48
min: 23
max_index: 1
min_index: 5

5.3 元素求和、求積

5.3.1 求和 np.sum(x)、x.sum()

axis指定維度,不指定則全體求和

keepdims指定是否保持數組維度,默認False

import numpy as np

x1 = np.arange(6).reshape(2,3)
print(x1)

print(np.sum(x1, axis=1))    # 按行求和
print(x1.sum(axis=1, keepdims=True))
print(np.sum(x1, axis=0))    # 按列求和
print(x1.sum(axis=0, keepdims=True))
print(np.sum(x1))    # 全體求和
print(x1.sum(keepdims=True))
[[0 1 2]
 [3 4 5]]
[ 3 12]
[[ 3]
 [12]]
[3 5 7]
[[3 5 7]]
15
[[15]]

5.3.2 求積 np.prod(x)、x.prod(),參數與求和一樣

import numpy as np

x1 = np.arange(1,7).reshape(2,3)
print(x1)
print(x1.prod())
print(np.prod(x1))
[[1 2 3]
 [4 5 6]]
720
720

5.4 中位數median、均值mean、方差var、標準差std

import numpy as np

x = np.random.normal(0, 1, size=10000)
print(np.median(x))    # 中位數 沒有x.median()的寫法
print(x.mean())    # 均值
print(np.mean(x))
print(x.var())    # 方差
print(np.var(x))
print(x.std())    # 標準差
print(np.std(x))
-0.0005526165156031632
-0.0031363778888049655
-0.0031363778888049655
0.993877024048911
0.993877024048911
0.9969338112677847
0.9969338112677847
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章