為什麼你用不好Numpy的random函數?

2021-01-14 Python數據之道

在python數據分析的學習和應用過程中,經常需要用到numpy的隨機函數,由於隨機函數random的功能比較多,經常會混淆或記不住,下面我們一起來匯總學習下。

import numpy as np

1 numpy.random.rand()

numpy.random.rand(d0,d1,...,dn)

np.random.rand(4,2)

array([[ 0.02173903,  0.44376568],

      [ 0.25309942,  0.85259262],

      [ 0.56465709,  0.95135013],

      [ 0.14145746,  0.55389458]])

np.random.rand(4,3,2) # shape: 4*3*2

array([[[ 0.08256277,  0.11408276],

       [ 0.11182496,  0.51452019],

       [ 0.09731856,  0.18279204]],

      [[ 0.74637005,  0.76065562],

       [ 0.32060311,  0.69410458],

       [ 0.28890543,  0.68532579]],

      [[ 0.72110169,  0.52517524],

       [ 0.32876607,  0.66632414],

       [ 0.45762399,  0.49176764]],

      [[ 0.73886671,  0.81877121],

       [ 0.03984658,  0.99454548],

       [ 0.18205926,  0.99637823]]])

2 numpy.random.randn()

numpy.random.randn(d0,d1,...,dn)

np.random.randn() # 當沒有參數時,返回單個數據

-1.1241580894939212

np.random.randn(2,4)

array([[ 0.27795239, -2.57882503,  0.3817649 ,  1.42367345],

      [-1.16724625, -0.22408299,  0.63006614, -0.41714538]])

np.random.randn(4,3,2)

array([[[ 1.27820764,  0.92479163],

       [-0.15151257,  1.3428253 ],

       [-1.30948998,  0.15493686]],

      [[-1.49645411, -0.27724089],

       [ 0.71590275,  0.81377671],

       [-0.71833341,  1.61637676]],

      [[ 0.52486563, -1.7345101 ],

       [ 1.24456943, -0.10902915],

       [ 1.27292735, -0.00926068]],

      [[ 0.88303   ,  0.46116413],

       [ 0.13305507,  2.44968809],

       [-0.73132153, -0.88586716]]])

標準正態分布介紹

3 numpy.random.randint()3.1 numpy.random.randint()

numpy.random.randint(low, high=None, size=None, dtype='l')

返回隨機整數,範圍區間為[low,high),包含low,不包含high

參數:low為最小值,high為最大值,size為數組維度大小,dtype為數據類型,默認的數據類型是np.int

high沒有填寫時,默認生成隨機數的範圍是[0,low)

np.random.randint(1,size=5) # 返回[0,1)之間的整數,所以只有0

array([0, 0, 0, 0, 0])

np.random.randint(1,5) # 返回1個[1,5)時間的隨機整數

4

np.random.randint(-5,5,size=(2,2))

array([[ 2, -1],

      [ 2,  0]])

3.2 numpy.random.random_integers

numpy.random.random_integers(low, high=None, size=None)

返回隨機整數,範圍區間為[low,high],包含low和high

參數:low為最小值,high為最大值,size為數組維度大小

high沒有填寫時,默認生成隨機數的範圍是[1,low]

該函數在最新的numpy版本中已被替代,建議使用randint函數

np.random.random_integers(1,size=5)

array([1, 1, 1, 1, 1])

4 生成[0,1)之間的浮點數

numpy.random.random_sample(size=None)

numpy.random.random(size=None)

numpy.random.ranf(size=None)

numpy.random.sample(size=None)

print('-random_sample----')

print(np.random.random_sample(size=(2,2)))

print('-random----')

print(np.random.random(size=(2,2)))

print('-ranf----')

print(np.random.ranf(size=(2,2)))

print('-sample----')

print(np.random.sample(size=(2,2)))

-random_sample----

[[ 0.34966859  0.85655008]

[ 0.16045328  0.87908218]]

-random----

[[ 0.25303772  0.45417512]

[ 0.76053763  0.12454433]]

-ranf----

[[ 0.0379055   0.51288667]

[ 0.71819639  0.97292903]]

-sample----

[[ 0.59942807  0.80211491]

[ 0.36233939  0.12607092]]

5 numpy.random.choice()

numpy.random.choice(a, size=None, replace=True, p=None)

np.random.choice(5,3)

array([4, 1, 4])

np.random.choice(5, 3, replace=False)

# 當replace為False時,生成的隨機數不能有重複的數值

array([0, 3, 1])

np.random.choice(5,size=(3,2))

array([[1, 0],

      [4, 2],

      [3, 3]])

demo_list = ['lenovo', 'sansumg','moto','xiaomi', 'iphone']

np.random.choice(demo_list,size=(3,3))

array([['moto', 'iphone', 'xiaomi'],

      ['lenovo', 'xiaomi', 'xiaomi'],

      ['xiaomi', 'lenovo', 'iphone']],

     dtype='<U7')

參數p的長度與參數a的長度需要一致;

參數p為概率,p裡的數據之和應為1

demo_list = ['lenovo', 'sansumg','moto','xiaomi', 'iphone']

np.random.choice(demo_list,size=(3,3), p=[0.1,0.6,0.1,0.1,0.1])

array([['sansumg', 'sansumg', 'sansumg'],

      ['sansumg', 'sansumg', 'sansumg'],

      ['sansumg', 'xiaomi', 'iphone']],

     dtype='<U7')

6 numpy.random.seed()

np.random.seed(0)

np.random.rand(5)

array([ 0.5488135 ,  0.71518937,  0.60276338,  0.54488318,  0.4236548 ])

np.random.seed(1676)

np.random.rand(5)

array([ 0.39983389,  0.29426895,  0.89541728,  0.71807369,  0.3531823 ])

np.random.seed(1676)

np.random.rand(5)

array([ 0.39983389,  0.29426895,  0.89541728,  0.71807369,  0.3531823 ])    

更多精彩內容請關注公眾號:

「Python數據之道」




相關焦點

  • Python Numpy-數組的常用函數
    import numpy as nparr1 = np.random.randint(1, 100, size=(2, 5))arr2 = np.random.randint(1, 100, size=(2, 5))arr3 = np.random.randint(1, 100, size=(2, 5))arr = np.vstack((arr1, arr2, arr3))
  • numpy.random介紹
    小數整數標準正態:randn()自定義正態分布:nomarl()import numpy as npimport matplotlib.pyplot as pltimport seaborn as sns均勻分布小數特定範圍:[0,1)rand(
  • 一文包會,教你如何熟練運用Python數值計算Numpy包
    對於用Python的朋友來說,在平常的數值計算中肯定會用到一個開源包,沒錯,它就是大名鼎鼎的Numpy包,全稱為Numberical Python,是Python的一種開源的數值計算擴展,Numpy包內部集成了大量的數學函數庫,你都可以隨手拿來使用,極為方便!
  • Numpy應用整理
    現在幾乎各種應用場合都會用到numpy,主要有以下幾個原因:numpy提供了很多數值計算和常用算法的函數numpy歸功了很多線性代數的相關操作numpy的執行效率高首先導入numpy庫import numpy as np常規列表應用用numpy建的列表類型都是ndarray,因此我們首先來看np.array
  • NumPy ndarray數組的創建
    表1:np.random 模塊常用函數函數描述np.random.random生成0到1之間的隨機數np.random.uniform生成均勻分布的隨機數np.random.randn生成標準正態的隨機數np.random.randint生成隨機的整數np.random.normal生成正態分布np.random.shuffle隨機打亂順序np.random.seed設置隨機數種子
  • python數據分析基礎之numpy
    邏輯或判斷4、用astype()函數對矩陣的元素類型進行轉換求極值及求和6、通過numpy.arange()及reshape()函數構造矩陣reshape構造矩陣7、初始化矩陣函數numpy.zeros()和numpy.ones()
  • Numpy學習打卡task02
    隨機數生成器可以是真正的硬體隨機數生成器(HRNGS),它生成的隨機數是某種物理環境屬性的當前值的函數,這種物理環境屬性是以實際上不可能建模的方式不斷變化的;也可以是偽隨機數生成器(PRNGS),它生成的數看起來是隨機的,但實際上是確定的,如果PRNG的狀態是已知的,就可以重現。本文中的numpy.random就是偽隨機數生成器。
  • 清晰易懂的Numpy入門教程
    如何通過numpy生成序列數(sequences),重複數(repetitions)和隨機數(random)7. 小結1. 如何構建numpy數組構建numpy數組的方法很多,比較常用的方法是用np.array函數對列表進行轉化。
  • numpy產生隨機數匯總
    numpy.random.random_sample、numpy.random.ranf、numpy.random.sample用法與該函數類似。注意:該函數和rand()的區別:random()參數只有一個參數「size」,有三種取值,None,int型整數,或者int型元組。
  • Python數據分析之numpy數組全解析
    ndarray 中的每個元素在內存中使用相同大小的塊numpy數組創建 創建Numpy數組一般有三種方法:(1)通過傳入可待跌對象創建,我將之稱為基本方法(2)使用Numpy內部功能函數,內部方法(3)使用特殊的庫函數,特殊方法基本方法:np.array()基本方法是通過給numpy提供的一些函數中傳入可迭代對象來創建數組
  • 深度學習中的NumPy基礎
    你為什麼要關心 NumPy,為什麼特別關心深度學習?在本文中,我將介紹幾個特定的用例,但是與其他 Python 數據結構相比,NumPy 最重要的特性之一是速度。比使用常規的 Python 列表數量級更快。
  • 入門|數據科學初學者必知的NumPy基礎知識
    對數組執行數學運算和邏輯運算時,NumPy 是非常有用的。在用 Python 對 n 維數組和矩陣進行運算時,NumPy 提供了大量有用特徵。這篇教程介紹了數據科學初學者需要了解的 NumPy 基礎知識,包括如何創建 NumPy 數組、如何使用 NumPy 中的廣播機制、如何獲取值以及如何操作數組。
  • NumPy ndarray數組元素的獲取
    請看下面的代碼:import numpy as npnp.random.seed(2019)nd1 = np.random.random([10])nd1[3]nd1[3:6]nd1[1:6:2]nd1[::-2]nd2=np.arange(25).reshape([5,5])nd2[1:3,1:3]nd2
  • Python數據分析之Numpy學習 2——NumPy 基礎 ndarray對象
    約定:import numpy as npndarray對象的常用屬性創建ndarray函數說明np.array(data,dtype=None, order=None)將數據data(列表、元組、數組或其他序列類型)轉換為ndarray。要麼推斷出dtype,要麼顯示指定dtype。
  • 零基礎學Python—你應該知道的Numpy小技巧
    正所謂興趣是最好的老師,學編程有兩件事情能幫助你迅速的成長和進步。一是好勝之心,二是好為人師,也就是愛炫耀,當然炫耀的是技術。但凡這樣的人,作為導師,我是比較喜歡的。或者說我特別喜歡同學們半桶水的狀態,中國傳統觀念講半桶水晃蕩是不好的,其實不然。接下來我來說說這其中的道理。
  • pandas與numpy中神奇的axis
    pandas與numpy中神奇的axis最近在百奧智匯兼職,基本上比較重的工作就在數據處理,所以pandas和numpy用的比較多。
  • Numpy庫的進一步的使用方式解析
    array( )函數默認根據列表或元素序列中各元素的數據類型,為ndarray( )對象指定最合適的數據類型。但是,你可以用dtype選項作為函數array( )的參數,明確指定dtype的類型。例如,要定義一個複數數組,可以像下面這樣使用dtype選項;自帶的數組創建方法NumPy庫有幾個函數能夠生成包含初始值的N維數組,數組元素因函數而異。
  • NumPy基礎教程,帶你玩轉多維數組
    Python 中的標準 type 函數同樣可以用於顯示數組類型,NumPy 有它自己的類型如:numpy.int32, numpy.int16, 和 numpy.float64,其中「int」和「float」代表數據的種類是整數還是浮點數,「32」和「16」代表這個數組的字節數(存儲大小)。ndarray.itemsize:數組中每個元素的字節存儲大小。
  • 數據科學中100個Numpy代碼技巧
    此外,它還為數組操作提供了許多數學函數庫。機器學習涉及到對數組的大量轉換和操作,這使得NumPy成為必不可少的工具之一。下面的100個練習都是從numpy郵件列表、stack overflow和numpy文檔中收集的。
  • 一個函數打天下,einsum
    ,不但複雜,還容易出錯現在,這些問題你統統可以一個函數搞定,沒錯,就是einsum,einsum函數就是根據上面的標記法實現的一種函數,可以根據給定的表達式進行運算,可以替代但不限於以下函數:矩陣求跡:trace求矩陣對角線:diag張量(沿軸)求和:sum張量轉置:transopose矩陣乘法:dot張量乘法:tensordot