科學計算基礎包——Numpy

1、NumPy簡介

  NumPy是高性能科學計算和數據分析的基礎包。它是pandas等其餘各類工具的基礎。python

一、NumPy的主要功能

  (1)ndarray:一個多維數組結構,高效且節省空間。
  (2)無需循環對整組數據進行快速運算的數學函數。
  (3)線性代數、隨機數生成和傅里葉變換功能。數組

二、安裝和引用

pip install numpy   # 安裝方法

import numpy as np    # 引用方法

三、爲何要使用NumPy?

(1)例:已知若干家跨國公司的市值(美圓),將其換算爲人民幣

import numpy as np
import random

# uniform隨機生成浮點數,這裏是隨機生成100~200之間的浮點數
a = [random.uniform(100.0, 200.0) for i in range(50)]
print(a)
x = 6.8   # 人民幣和美圓的匯率

# 方法一:使用循環
b = []
for ele in a:
    b.append(ele * x)
print(b)

# 方法二:使用numpy
a = np.array(a)
c = a * x
print(c)

(2)例:已知購物車中每件商品的價格和商品件數,求總金額

import numpy as np
import random

# uniform隨機生成浮點數,這裏是隨機生成100~200之間的浮點數
a = [random.uniform(100.0, 200.0) for i in range(50)]
g = [random.randint(1, 10) for j in range(50)]
d = np.array(g)

sum = a*d.sum()    # 全部商品總金額
print(sum)

2、ndarray-多維數組對象

  建立ndarray:np.array(array_like)app

  數組和列表的區別:dom

  1. 數組對象內的元素類型必須相同
  2. 數組大小不可修改

一、ndarray經常使用屬性

屬性 屬性含義
T 數組的轉置(對高維數組而言)
size 數組元素的個數
ndim 數組的維數
shape 數組的維度大小(元組形式)
dtype 數組元素的數據類型

(1)dtype

  能夠查看具體數據類型。ide

>>> import numpy as np
>>> a = np.array(range(10))
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a.dtype
dtype('int64')

(2)size

  查看當前存了多少個元素。函數

>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a.size
10

(3)ndim

  查看數組的維數。工具

>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> a.ndim
2

(3)shape

  返回一個元組,說明當前數組對象是一個幾行幾列的多維數組。性能

>>> a = np.array([[1,2,3], [4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> a.dtype
dtype('int64')
>>> a.size
6
>>> a.shape
(2, 3)    # 返回一個元組,說明是一個兩行三列的二維數組

# 三維數組
>>> a = np.array([[[1,2,3], [4,5,6]],[[1,2,3], [3,4,5]]])
>>> a
array([[[1, 2, 3],
        [4, 5, 6]],
       [[1, 2, 3],
        [3, 4, 5]]])
>>> a.shape    # 兩頁兩行三列的三維數組
(2, 2, 3)

  還可使用reshape函數來調整數組大小ui

>>> a=np.arange(15)
>>> a
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
>>> a.reshape((3,5))
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

  查看獲取對應位置元素spa

>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> a[0][0]
0
>>> a[0,0]
0

(4)T

  數組轉置。

>>> a = np.array([[1,2,3], [4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> a.T
array([[1, 4],
       [2, 5],
       [3, 6]])
>>> a = a.T
>>> a.T
array([[1, 2, 3],
       [4, 5, 6]])
>>> _.T
array([[1, 4],
       [2, 5],
       [3, 6]])

二、ndarray數據類型

  ndarray中絕大多數狀況下都是保存各類數字,基本不保存字符串數據。

類型 字節細分
布爾型 bool_
整型 int_ int8 int16 int32 int64
無符號整型 uint8 uint16 uint32 uint64
浮點型 float_ float16 float32 float64
複數型 complex_ complex64 complex128

注意:
  (1)64位的整數最大值是:263-1=9223372036854775807;
  (2)無符號整型只表示正數,所以64位的無符號整數最大值是:2
64-1=18446744073709551615

三、ndarray對象建立

方法 描述
array() 將列表轉換爲數組,可選擇顯示指定dtype
arange() range的numpy版,支持浮點數
linespace() 相似arange(),第三個參數爲數組長度
zeros() 根據指定形狀和dtype建立全0數組
ones() 根據指定形狀和dtype建立全1數組
empty() 根據指定形狀和dtype建立空數組(隨機值)
eye() 根據指定邊長建立單位矩陣

(1)zeros、ones

  zeros:生成值全爲0的數組。
  ones:生成值全爲1的數組。

# 列表的方法
>>> np.array([0]*10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

# zeros()方法
>>> np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
>>> a = np.zeros(10)
>>> a.dtype
dtype('float64')    # 默認計算是浮點數

# 設置類型參數
>>> a = np.zeros(10, dtype='int')
>>> a
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

# ones()方法生成全是全爲1的數組
>>> a = np.ones(10)
>>> a
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

(2)empty

  根據指定形狀和dtype建立空數組(隨機數)。取到內存內留存的值。
  能夠先建立數組,再將這些值都覆蓋掉。

>>> a = np.empty(100)
>>> a
array([ 2.00000000e+000,  2.00000000e+000,  2.86558075e-322,
        ...
        7.10580593e+159])

  

(3)arange

  range的numpy版,支持浮點數。

>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 設置起始值和結束值
>>> np.arange(3,9)
array([3, 4, 5, 6, 7, 8])

# 設置起始值、結束值和步長(python的range沒有步長設置)
>>> np.arange(2,7,0.5)   # 注意:步長能夠爲小數
array([2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5, 6. , 6.5])

(4)linespace

  數學中的概念:線性空間。它與arange使用很是類似。但第三個參數不是步長仍是把數組分爲多少份。

>>> np.linspace(0,10,11)
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
>>> _.size
11

>>> np.linspace(0,9,20)
array([0.        , 0.47368421, 0.94736842, 1.42105263, 1.89473684,
       2.36842105, 2.84210526, 3.31578947, 3.78947368, 4.26315789,
       4.73684211, 5.21052632, 5.68421053, 6.15789474, 6.63157895,
       7.10526316, 7.57894737, 8.05263158, 8.52631579, 9.        ])
       
# 數學中應用
import numpy as np
import matplotlib.pyplot as plt   # python的繪圖庫

x = np.linspace(-10,10,10000)
y = x**2
plt.plot(x,y)   # 使用matplotlib來繪製點
plt.show()

  應用執行效果以下:

數學應用

(5)eye

  生成線性代數中的單位矩陣。對角線爲1,其餘位置是0。

>>> np.eye(5)
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])

3、ndarray-批量運算

一、數組和標量之間的運算

a+1 a*3 1//a a**0.5 a>5

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a+1
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
>>> a*3
array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])
>>> 3/a
array([       inf, 3.        , 1.5       , 1.        , 0.75      ,
       0.6       , 0.5       , 0.42857143, 0.375     , 0.33333333])
<string>:1: RuntimeWarning: divide by zero encountered in true_divide

二、一樣大小數組之間的運算

a+b a/b a**b a%b a==b a>b

>>> b = np.arange(10,20)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
>>> a+b
array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28])

>>> a>b
array([False, False, False, False, False, False, False, False, False,
       False])
>>> a[0]=20
>>> a>b
array([ True, False, False, False, False, False, False, False, False,
       False])

4、numPy索引和切片

  ndarray對象的內容能夠經過索引或切片來訪問和修改,與 Python 中 list 的切片操做同樣。
  ndarray 數組能夠基於 0 - n 的下標進行索引,切片對象能夠經過內置的 slice 函數,並設置 start, stop 及 step 參數進行,從原數組中切割出一個新數組。

一、ndarray-索引

# 一維數組的索引
>>> a=np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[5]
5

# 多維數組的索引
>>> a = a.reshape((2,5))
>>> a
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
# (1)列表式寫法
>>> a[1][3]
8
# (2)新式寫法
>>> a[1,3]
8

二、ndarray-切片

# 一維數組的切片
>>> a = np.arange(15)
>>> a
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
>>> a[0:4]
array([0, 1, 2, 3])
>>> a[:4]
array([0, 1, 2, 3])
>>> a[4:]
array([ 4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

# 多維數組的切片
>>> a = np.arange(15).reshape((3,5))
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> a[0:2,0:2]   # 切前兩行前兩列
array([[0, 1],
       [5, 6]])
>>> a[1:, 2:4]   # 從第二行開始切,切第3-4列
array([[ 7,  8],
       [12, 13]])

  數組切片和列表切片的不一樣:數組切片時並不會自動複製(而是建立一個視圖),在切片數組上的修改會影響原數組。

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = list(range(10))
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> c = a[0:4]
>>> c
array([0, 1, 2, 3])
>>> d = b[0:4]
>>> d
[0, 1, 2, 3]
>>> c[0] = 20
>>> d[0] = 20
>>> c
array([20,  1,  2,  3])
>>> d
[20, 1, 2, 3]
>>> a   # 能夠看到對切片數組修改影響了原數組
array([20,  1,  2,  3,  4,  5,  6,  7,  8,  9])
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  copy()方法能夠建立數組的深拷貝。

>>> a[0] = 0
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> c = a[0:4].copy()
>>> c
array([0, 1, 2, 3])
>>> c[0] = 20
>>> c
array([20,  1,  2,  3])
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

5、高級索引

一、ndarray-布爾型索引

  布爾型索引:將一樣大小的布爾數組傳進索引,會返回一個由全部True對應位置的元素的數組。

(1)問題:給一個數組,選出數組中全部大於5的數

# 常規方法
>>> import random
>>> a = [random.randint(0, 10) for i in range(20)]
>>> a
[8, 2, 4, 0, 9, 0, 1, 7, 10, 9, 4, 0, 5, 8, 5, 8, 4, 0, 3, 8]
>>> filter(lambda x:x>5, a)
<filter object at 0x11704b320>
>>> list(filter(lambda x:x>5, a))
[8, 9, 7, 10, 9, 8, 8, 8]

# 布爾索引解決
>>> a = np.array(a)   # 列表轉化爲數組
>>> a
array([ 8,  2,  4,  0,  9,  0,  1,  7, 10,  9,  4,  0,  5,  8,  5,  8,  4,
        0,  3,  8])
>>> a[a>5]
array([ 8,  9,  7, 10,  9,  8,  8,  8])

  原理:數組和標量的運算,a > 5 會對a中的每個元素進行判斷,返回一個布爾數組。
     布爾型索引,將一樣大小的布爾數組傳進索引,會返回一個由全部True對應位置的元素的數組。

(2)問題:給一個數組,選出數組中全部大於5的偶數。

>>> a
array([ 8,  2,  4,  0,  9,  0,  1,  7, 10,  9,  4,  0,  5,  8,  5,  8,  4,
        0,  3,  8])
>>> b = a[a>5]
>>> b
array([ 8,  9,  7, 10,  9,  8,  8,  8])
>>> b[b%2==0]
array([ 8, 10,  8,  8,  8])

# 合併寫法
>>> a
array([ 8,  2,  4,  0,  9,  0,  1,  7, 10,  9,  4,  0,  5,  8,  5,  8,  4,
        0,  3,  8])
>>> a[(a>5) & (a%2==0)]    # 與運算  注意:& 和 and的區別
array([ 8, 10,  8,  8,  8])

(3)問題:給一個數組,選出數組中全部大於5的數和偶數。(or)

# 或運算,or關係
a[(a>5) | (a%2==0)]
array([ 8,  2,  4,  0,  9,  0,  7, 10,  9,  4,  0,  8,  8,  4,  0,  8])

二、ndarray-花式索引

  花式索引指的是利用整數數組進行索引。
  花式索引根據索引數組的值做爲目標數組的某個軸的下標來取值。對於使用一維整型數組做爲索引,若是目標是一維數組,那麼索引的結果就是對應位置的元素;若是目標是二維數組,那麼就是對應下標的行。
  花式索引跟切片不同,它老是將數據複製到新數組中。

(1)問題:對於一個數組,選出其第1,3,4,6,7個元素,組成新的二維數組。

>>> a = np.arange(20)
>>> a
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])
>>> a[[1,3,4,6,7]]   # 整數數組索引
array([1, 3, 4, 6, 7])

(2)問題:對一個二維數組,選出其第一列和第三列,組成新的二維數組。

>>> a = np.arange(20).reshape(4,5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
>>> a[0, 2:4]
array([2, 3])
>>> a[0]>2
array([False, False, False,  True,  True])
>>> a[0, a[0]>2]
array([3, 4])
# 注意花式索引不能同時出如今逗號兩邊,好比想選擇六、八、1六、18
>>> a[[1,3], [1,3]]
array([ 6, 18])    # 實際取的是a[1,1] 和a[3,3]的值

# 實際解法以下所示:
>>> a[[1,3],:]   # 第1行到第4行,列全切
array([[ 5,  6,  7,  8,  9],
       [15, 16, 17, 18, 19]])
>>> a[:,[1,3]]   # 行全切,切第一列到第三列
array([[ 1,  3],
       [ 6,  8],
       [11, 13],
       [16, 18]])
>>> a[[1,3],:][:,[1,3]]
array([[ 6,  8],
       [16, 18]])

6、NumPy-array通用函數

  通用函數:能同時對數組中全部元素進行運算的函數。常見通用函數以下所示:

一、一元函數

  abs,sqrt,exp,log,ceil,floor,rint,trunc,modf,isnan,isinf,cos,sin,tan

>>> a = np.arange(-5,5)
>>> a
array([-5, -4, -3, -2, -1,  0,  1,  2,  3,  4])

>>> np.abs(a)    # 取絕對值
array([5, 4, 3, 2, 1, 0, 1, 2, 3, 4])
>>> abs(a)
array([5, 4, 3, 2, 1, 0, 1, 2, 3, 4])

>>> np.sqrt(a)   # 開方
<string>:1: RuntimeWarning: invalid value encountered in sqrt
array([       nan,        nan,        nan,        nan,        nan,
       0.        , 1.        , 1.41421356, 1.73205081, 2.        ])

# 向下取整:單個是math.floor();批量是:np.floor()
>>> import math
>>> math.floor(-1.6)
-2
>>> math.floor(1.6)
1
# 向上取整:單個是math.ceil(),批量是np.ceil()
>>> math.ceil(1.6)
2
>>> math.ceil(-1.6)
-1
# 四捨五入:round()
>>> round(1.6)
2
>>> round(-1.6)
-2
>>> round(-1.3)
-1

# 批量操做
>>> a = np.arange(-5.5, 5.5)
>>> a
array([-5.5, -4.5, -3.5, -2.5, -1.5, -0.5,  0.5,  1.5,  2.5,  3.5,  4.5])
>>> np.floor(a)   # 向下取整
array([-6., -5., -4., -3., -2., -1.,  0.,  1.,  2.,  3.,  4.])
>>> np.ceil(a)    # 向上取整
array([-5., -4., -3., -2., -1., -0.,  1.,  2.,  3.,  4.,  5.])
>>> np.round(a)   # 四捨五入
array([-6., -4., -4., -2., -2., -0.,  0.,  2.,  2.,  4.,  4.])
>>> np.rint(a)    # 四捨五入(同round())
array([-6., -4., -4., -2., -2., -0.,  0.,  2.,  2.,  4.,  4.])
>>> np.trunc(a)   # 截斷(丟棄小數部分)
array([-5., -4., -3., -2., -1., -0.,  0.,  1.,  2.,  3.,  4.])

# modf:整數和小數部分分拆
>>> a
array([-5.5, -4.5, -3.5, -2.5, -1.5, -0.5,  0.5,  1.5,  2.5,  3.5,  4.5])
>>> np.modf(a)
(array([-0.5, -0.5, -0.5, -0.5, -0.5, -0.5,  0.5,  0.5,  0.5,  0.5,  0.5]), array([-5., -4., -3., -2., -1., -0.,  0.,  1.,  2.,  3.,  4.]))
>>> k,y = np.modf(a)
>>> k
array([-0.5, -0.5, -0.5, -0.5, -0.5, -0.5,  0.5,  0.5,  0.5,  0.5,  0.5])
>>> y
array([-5., -4., -3., -2., -1., -0.,  0.,  1.,  2.,  3.,  4.])

二、二元函數

  add,substract,multiply,divide,power,mod,maximum,mininum

# maximum:對兩個數組每一個值均取最大值
>>> a
array([3, 4, 5, 6, 7])
>>> b
array([3, 0, 5, 0, 7])
>>> np.maximum(a,b)
array([3, 4, 5, 6, 7])

# minimum:對兩個數組每一個值均取最小值
>>> np.minimum(a,b)
array([3, 0, 5, 0, 7])

三、補充:浮點數特殊值

  Numpy中建立特殊值:np.nan np.inf
  在數據分析中,nan常被用做表示數據缺失值

# python中有兩個浮點數特殊值
>>> float('3.5')
3.5
>>> float('nan')
nan
>>> float('inf')
inf

# nan(Not a Number):不等於任何浮點數(nan != nan)
>>> a = np.arange(5)
>>> a
array([0, 1, 2, 3, 4])
>>> a/a
<string>:1: RuntimeWarning: invalid value encountered in true_divide
array([nan,  1.,  1.,  1.,  1.])
>>> np.nan   # 獲取nan值
nan
>>> np.nan == np.nan   # 兩個nan不相等,由於nan不等於任何值
False

>>> b = a/a
>>> b
array([nan,  1.,  1.,  1.,  1.])
>>> np.isnan(b)    # 判斷出數組中哪些是nan值
array([ True, False, False, False, False])
>>> b[~(np.isnan(b))]   # ~取反
array([1., 1., 1., 1.])


# inf(infinity):比任何浮點數都大,表示無窮大的數
>>> float('inf') > 10000000
True
>>> a = np.array([3,4,5,6,7])
>>> b = np.array([3,0,5,0,7])
>>> a/b
array([ 1., inf,  1., inf,  1.])
>>> np.inf == np.inf   # 無窮大的數能夠相等
True

# 過濾掉數組中inf的數
>>> c = a/b
>>> c
array([ 1., inf,  1., inf,  1.])
>>> c[c!=np.inf]
array([1., 1., 1.])
# 利用isinf()的寫法
>>> c[~np.isinf(c)]
array([1., 1., 1.])

7、NumPy-數學和統計方法

>>> a
array([3, 4, 5, 6, 7])

# sum:求和
>>> a.sum()
25

# mean:求平均數
>>> a.mean()
5.0

# var:求方差,方差表示整組數據的離散程度
>>> a.var()
2.0
# 方差公式驗證:
>>> a
array([3, 4, 5, 6, 7])
>>> ((3-5)**2 + (4-5)**2 + (5-5)**2 + (6-5)**2 + (7-5)**2)/5
2.0

# std:求標準差(對方差開根)
>>> a.std()
1.4142135623730951
>>> math.sqrt(2)
1.4142135623730951
# 標準差和均值能夠估計整個數組的範圍
>>> a = np.arange(0,10,0.2)
>>> a
array([0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. , 2.2, 2.4,
       2.6, 2.8, 3. , 3.2, 3.4, 3.6, 3.8, 4. , 4.2, 4.4, 4.6, 4.8, 5. ,
       5.2, 5.4, 5.6, 5.8, 6. , 6.2, 6.4, 6.6, 6.8, 7. , 7.2, 7.4, 7.6,
       7.8, 8. , 8.2, 8.4, 8.6, 8.8, 9. , 9.2, 9.4, 9.6, 9.8])
>>> a.mean()
4.9
>>> a.std()  # 標準差
2.8861739379323628
>>> a.mean()-a.std()   # 大概估計數組的範圍
2.0138260620676376
>>> a.mean()-2*a.std()
-0.8723478758647252
>>> a.mean()+2*a.std()
10.672347875864727

# min:求最小值
>>> a.min()
0.0

# max:求最大值
>>> a.max()
9.8

# argmin:求最小值索引
>>> a.argmin()
0

# argmax:求最大值索引
>>> a.argmax()
49

8、NumPy-隨機數生成

# python默認的random模塊
>>> random.random()
0.5107400270751336
>>> random.randint(0,10)
9
>>> random.choice([1,3,4,5])
5
# shuffle():用於將列表中元素打亂
>>> a = [1,3,4,5,7]
>>> random.shuffle(a)   # 打亂列表
>>> a
[1, 4, 7, 3, 5]
# uniform(a,b):用於生成一個指定範圍內的整數。其中參數a是下限,參數b是上限,生成的隨機數n:a<=n<=b
>>> random.uniform(2.0,4.0)
2.190653911434251

# 隨機函數在np.random子包內方法
# rand:給定形狀產生隨機數組(0到1之間的數)
>>> np.random.rand(10)
array([0.28624648, 0.69121364, 0.74607992, 0.2587513 , 0.60445688,
       0.2890542 , 0.88712216, 0.93544304, 0.99640741, 0.73059636])

# randint:給定形狀產生隨機整數
>>> np.random.randint(0,10)     # 取範圍內隨機數
3
>>> np.random.randint(0,10,10)  # 用隨機數生成一個有10個元素的數組
array([7, 5, 6, 8, 5, 4, 1, 9, 7, 4])
>>> np.random.randint(0,10,(3,5))    # 用隨機數生成一個三行五列的二維數組
array([[2, 1, 5, 0, 9],
       [5, 4, 8, 7, 3],
       [2, 0, 5, 9, 9]])
>>> np.random.randint(0,10,(3,5,5))  # 用隨機數生成一個三維數組
array([[[7, 4, 8, 5, 9],
        [8, 1, 4, 3, 5],
        [9, 8, 9, 3, 1],
        [8, 8, 7, 0, 7],
        [7, 0, 8, 6, 8]],
       [[3, 1, 8, 1, 2],
        [8, 2, 7, 6, 4],
        [4, 3, 8, 0, 6],
        [3, 5, 3, 1, 2],
        [4, 2, 6, 6, 2]],
       [[4, 5, 5, 4, 6],
        [0, 7, 5, 6, 6],
        [6, 4, 8, 8, 2],
        [5, 0, 3, 7, 9],
        [8, 5, 6, 2, 5]]])

# choice:給定形狀產生隨機選擇
>>> np.random.choice([1,2,3,4,5])
2
>>> np.random.choice([1,2,3,4,5],10)
array([1, 2, 1, 4, 1, 3, 2, 5, 3, 2])

# shuffle:與random.shuffle相同


# uniform:給定形狀產生隨機數組
>>> np.random.uniform(2.0,5.0)
2.9530512208056257
>>> np.random.uniform(2.0,5.0,10)
array([3.9142783 , 4.71991751, 4.05954663, 4.13170221, 3.88043716,
       2.00233882, 2.34833856, 2.48430517, 3.07240671, 3.4608536 ])
相關文章
相關標籤/搜索