国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) Python教程 Python 機(jī)器學(xué)習(xí)庫 NumPy

Python 機(jī)器學(xué)習(xí)庫 NumPy

Apr 19, 2018 am 10:49 AM
numpy python 機(jī)器

在我們使用Python語言進(jìn)行機(jī)器學(xué)習(xí)編程的時候,這是一個非常常用的基礎(chǔ)庫。本文針對Python 機(jī)器學(xué)習(xí)庫 NumPy入門教程,感興趣的朋友一起學(xué)習(xí)吧

NumPy是一個Python語言的軟件包,它非常適合于科學(xué)計算。在我們使用Python語言進(jìn)行機(jī)器學(xué)習(xí)編程的時候,這是一個非常常用的基礎(chǔ)庫。

本文是對它的一個入門教程。

介紹

NumPy是一個用于科技計算的基礎(chǔ)軟件包,它是Python語言實(shí)現(xiàn)的。它包含了:

  • 強(qiáng)大的N維數(shù)組結(jié)構(gòu)

  • 精密復(fù)雜的函數(shù)

  • 可集成到C/C 和Fortran代碼的工具

  • 線性代數(shù),傅里葉變換以及隨機(jī)數(shù)能力

除了科學(xué)計算的用途以外,NumPy也可被用作高效的通用數(shù)據(jù)的多維容器。由于它適用于任意類型的數(shù)據(jù),這使得NumPy可以無縫和高效的集成到多種類型的數(shù)據(jù)庫中。

獲取NumPy

由于這是一個Python語言的軟件包,因此需要你的機(jī)器上首先需要具備Python語言的環(huán)境。關(guān)于這一點(diǎn),請自行在網(wǎng)絡(luò)上搜索獲取方法。

關(guān)于如何獲取NumPy也請參閱scipy.org官網(wǎng)上的Installing packages。本文不再贅述。

筆者推薦使用pip的方式安裝Python包,命令如下:


pip3 install numpy


本文的代碼在如下的環(huán)境中驗證和測試:

  • 硬件:MacBook Pro 2015

  • OS:macOS High Sierra

  • 語言環(huán)境:Python 3.6.2

  • 軟件包:numpy 1.13.3

可以在這里獲取到本文的所有源碼:https://github.com/paulQuei/numpy_tutorial

另外,

  • 為了簡單起見,本文我們會通過Python的print函數(shù)來進(jìn)行結(jié)果的驗證

  • 為了拼寫方便,我們會默認(rèn)import numpy as np

基礎(chǔ)屬性與數(shù)組創(chuàng)建

NumPy的基礎(chǔ)是一個同構(gòu)的多維數(shù)據(jù),數(shù)組中的元素可以通過下標(biāo)來索引。在NumPy中,維度稱之為axis(復(fù)數(shù)是axes),維度的數(shù)量稱之為rank。

例如:

下面是一個具有rank 1的數(shù)組,axis的長度為3:

[1, 2, 3]

下面是一個具有rank 2的數(shù)組,axis的長度也是3:

[[ 1, 2, 3],
?[ 4, 5, 6]]

我們可以通過array函數(shù)來創(chuàng)建NumPy的數(shù)組,例如這樣:


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


請注意,這里方括號是必須的,下面這種寫法是錯誤的:


a = np.array(1,2,3,4) # WRONG!!!


NumPy的數(shù)組類是ndarray,它有一個別名是 numpy.array,但這與Python標(biāo)準(zhǔn)庫的array.array并不一樣。后者僅僅是一個一維數(shù)組。而ndarray具有以下的屬性:

  • ndarray.ndim:數(shù)組的維數(shù)。在Python世界中,維數(shù)稱之為rank

  • ndarray.shape:數(shù)組的維度。這是一系列數(shù)字,長度由數(shù)組的維度(ndim)決定。例如:長度為n的一維數(shù)組的shape是n。一個n行m列的矩陣的shape是n,m

  • ndarray.size:數(shù)組中所有元素的數(shù)量

  • ndarray.dtype:數(shù)組中元素的類型,例如numpy.int32, numpy.int16或者numpy.float64

  • ndarray.itemsize:數(shù)組中每個元素的大小,單位為字節(jié)

  • ndarray.data:存儲數(shù)組元素的緩沖。通常我們只需要通過下標(biāo)來訪問元素,而不需要訪問緩沖

下面我們來看一下代碼示例:


# create_array.py

import numpy as np

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

print('a=')
print(a)
print("a's ndim {}".format(a.ndim))
print("a's shape {}".format(a.shape))
print("a's size {}".format(a.size))
print("a's dtype {}".format(a.dtype))
print("a's itemsize {}".format(a.itemsize))
print('')
print('b=')
print(b)
print("b's ndim {}".format(b.ndim))
print("b's shape {}".format(b.shape))
print("b's size {}".format(b.size))
print("b's dtype {}".format(b.dtype))
print("b's itemsize {}".format(b.itemsize))


下面是這段代碼的輸出:


a=
[1 2 3]
a's ndim 1
a's shape (3,)
a's size 3
a's dtype int64
a's itemsize 8
b=
[[1 2 3]
 [4 5 6]]
b's ndim 2
b's shape (2, 3)
b's size 6
b's dtype int64
b's itemsize 8


我們也可以在創(chuàng)建數(shù)組的時候,指定元素的類型,例如這樣:


c = np.array( [ [1,2], [3,4] ], dtype=complex )



關(guān)于array函數(shù)的更多參數(shù)說明,請參見這里:numpy.array

注:NumPy本身支持多維數(shù)組,也支持各種類型元素的數(shù)據(jù)。但考慮到,三維及以上的數(shù)組結(jié)構(gòu)并不容易理解,而且我們在進(jìn)行機(jī)器學(xué)習(xí)編程的時候,用的最多的是矩陣運(yùn)算。因此,本文接下來的例子主要以一維和二維數(shù)字型數(shù)組來進(jìn)行示例說明。

特定array的創(chuàng)建

在實(shí)際上的項目工程中,我們常常會需要一些特定的數(shù)據(jù),NumPy中提供了這么一些輔助函數(shù):

  • zeros:用來創(chuàng)建元素全部是0的數(shù)組

  • ones:用來創(chuàng)建元素全部是1的數(shù)組

  • empty:用來創(chuàng)建未初始化的數(shù)據(jù),因此是內(nèi)容是不確定的

  • arange:通過指定范圍和步長來創(chuàng)建數(shù)組

  • linespace:通過指定范圍和元素數(shù)量來創(chuàng)建數(shù)組

  • random:用來生成隨機(jī)數(shù)


# create_specific_array.py

import numpy as np

a = np.zeros((2,3))
print('np.zeros((2,3)= \n{}\n'.format(a))

b = np.ones((2,3))
print('np.ones((2,3))= \n{}\n'.format(b))

c = np.empty((2,3))
print('np.empty((2,3))= \n{}\n'.format(c))

d = np.arange(1, 2, 0.3)
print('np.arange(1, 2, 0.3)= \n{}\n'.format(d))

e = np.linspace(1, 2, 7)
print('np.linspace(1, 2, 7)= \n{}\n'.format(e))

f = np.random.random((2,3))
print('np.random.random((2,3))= \n{}\n'.format(f))


這段代碼的輸出如下


np.zeros((2,3)= 
[[ 0. 0. 0.]
 [ 0. 0. 0.]]
np.ones((2,3))= 
[[ 1. 1. 1.]
 [ 1. 1. 1.]]
np.empty((2,3))= 
[[ 1. 1. 1.]
 [ 1. 1. 1.]]
np.arange(1, 2, 0.3)= 
[ 1. 1.3 1.6 1.9]
np.linspace(1, 2, 7)= 
[ 1.  1.16666667 1.33333333 1.5  1.66666667 1.83333333
 2. ]
np.random.random((2,3))= 
[[ 0.5744616 0.58700653 0.59609648]
 [ 0.0417809 0.23810732 0.38372978]]


Shape與操作

除了生成數(shù)組之外,當(dāng)我們已經(jīng)持有某個數(shù)據(jù)之后,我們可能會需要根據(jù)已有數(shù)組來產(chǎn)生一些新的數(shù)據(jù)結(jié)構(gòu),這時候我們可以使用下面這些函數(shù):

  • reshape:根據(jù)已有數(shù)組和指定的shape,生成一個新的數(shù)組

  • vstack:用來將多個數(shù)組在垂直(v代表vertical)方向拼接(數(shù)組的維度必須匹配)

  • hstack:用來將多個數(shù)組在水平(h代表horizontal)方向拼接(數(shù)組的維度必須匹配)

  • hsplit:用來將數(shù)組在水平方向拆分

  • vsplit:用來將數(shù)組在垂直方向拆分

下面我們通過一些例子來進(jìn)行說明。

為了便于測試,我們先創(chuàng)建幾個數(shù)據(jù)。這里我們創(chuàng)建了:

  • zero_line:一行包含3個0的數(shù)組

  • one_column:一列包含3個1的數(shù)組

  • a:一個2行3列的矩陣

  • b:[11, 20)區(qū)間的整數(shù)數(shù)組


# shape_manipulation.py
zero_line = np.zeros((1,3))
one_column = np.ones((3,1))
print("zero_line = \n{}\n".format(zero_line))
print("one_column = \n{}\n".format(one_column))
a = np.array([(1,2,3), (4,5,6)])
b = np.arange(11, 20)
print("a = \n{}\n".format(a))
print("b = \n{}\n".format(b))


通過輸出我們可以看到它們的結(jié)構(gòu):


zero_line = 
[[ 0. 0. 0.]]
one_column = 
[[ 1.]
 [ 1.]
 [ 1.]]
a = 
[[1 2 3]
 [4 5 6]]
b = 
[11 12 13 14 15 16 17 18 19]


數(shù)組b原先是一個一維數(shù)組,現(xiàn)在我們通過reshape方法將其調(diào)整成為一個3行3列的矩陣:


# shape_manipulation.py
b = b.reshape(3, -1)
print("b.reshape(3, -1) = \n{}\n".format(b))


這里的第二參數(shù)設(shè)為-1,表示根據(jù)實(shí)際情況自動決定。由于原先是9個元素的數(shù)組,因此調(diào)整后剛好是3X3的矩陣。這段代碼輸出如下:


b.reshape(3, -1) = 
[[11 12 13]
 [14 15 16]
 [17 18 19]]


接著,我們通過vstack函數(shù),將三個數(shù)組在垂直方向拼接:


# shape_manipulation.py
c = np.vstack((a, b, zero_line))
print("c = np.vstack((a,b, zero_line)) = \n{}\n".format(c))



這段代碼輸出如下,請讀者仔細(xì)觀察一下拼接前后的數(shù)據(jù)結(jié)構(gòu):


c = np.vstack((a,b, zero_line)) = 
[[ 1. 2. 3.]
 [ 4. 5. 6.]
 [ 11. 12. 13.]
 [ 14. 15. 16.]
 [ 17. 18. 19.]
 [ 0. 0. 0.]]


同樣的,我們也可以通過hstack進(jìn)行水平方向的拼接。為了可以拼接我們需要先將數(shù)組a調(diào)整一下結(jié)構(gòu):


# shape_manipulation.py
a = a.reshape(3, 2)
print("a.reshape(3, 2) = \n{}\n".format(a))
d = np.hstack((a, b, one_column))
print("d = np.hstack((a,b, one_column)) = \n{}\n".format(d))


這段代碼輸出如下,請再次仔細(xì)觀察拼接前后的數(shù)據(jù)結(jié)構(gòu):


a.reshape(3, 2) = 
[[1 2]
 [3 4]
 [5 6]]
d = np.hstack((a,b, one_column)) = 
[[ 1.  2. 11. 12. 13.  1.]
 [ 3.  4. 14. 15. 16.  1.]
 [ 5.  6. 17. 18. 19.  1.]]


請注意,如果兩個數(shù)組的結(jié)構(gòu)是不兼容的,拼接將無法完成。例如下面這行代碼,它將無法執(zhí)行:


# shape_manipulation.py
# np.vstack((a,b)) # ValueError: dimensions not match


這是因為數(shù)組a具有兩列,而數(shù)組b具有3列,所以它們無法拼接。

接下來我們再看一下拆分。首先,我們將數(shù)組d在水平方向拆分成3個數(shù)組。然后我們將中間一個(下標(biāo)是1)數(shù)組打印出來:


# shape_manipulation.py
e = np.hsplit(d, 3) # Split a into 3
print("e = np.hsplit(d, 3) = \n{}\n".format(e))
print("e[1] = \n{}\n".format(e[1]))


這段代碼輸出如下:


e = np.hsplit(d, 3) = 
[array([[ 1., 2.],
    [ 3., 4.],
    [ 5., 6.]]), array([[ 11., 12.],
    [ 14., 15.],
    [ 17., 18.]]), array([[ 13.,  1.],
    [ 16.,  1.],
    [ 19.,  1.]])]
e[1] = 
[[ 11. 12.]
 [ 14. 15.]
 [ 17. 18.]]


另外,假設(shè)我們設(shè)置的拆分?jǐn)?shù)量使得原先的數(shù)組無法平均拆分,則操作會失?。?/p>


# np.hsplit(d, 4) # ValueError: array split does not result in an equal pision



除了指定數(shù)量平均拆分,我們也可以指定列數(shù)進(jìn)行拆分。下面是將數(shù)組d從第1列和第3列兩個地方進(jìn)行拆分:



# shape_manipulation.py
f = np.hsplit(d, (1, 3)) # # Split a after the 1st and the 3rd column
print("f = np.hsplit(d, (1, 3)) = \n{}\n".format(f))


這段代碼輸出如下。數(shù)組d被拆分成了分別包含1,2,3列的三個數(shù)組:


f = np.hsplit(d, (1, 3)) = 
[array([[ 1.],
    [ 3.],
    [ 5.]]), array([[ 2., 11.],
    [ 4., 14.],
    [ 6., 17.]]), array([[ 12., 13.,  1.],
    [ 15., 16.,  1.],
    [ 18., 19.,  1.]])]


最后我們再將數(shù)組d在垂直方向進(jìn)行拆分。同樣的,如果指定的拆分?jǐn)?shù)無法平均拆分則會失?。?/p>


# shape_manipulation.py
g = np.vsplit(d, 3)
print("np.hsplit(d, 2) = \n{}\n".format(g))
# np.vsplit(d, 2) # ValueError: array split does not result in an equal pision
np.vsplit(d, 3)將產(chǎn)生三個一維數(shù)組:
np.vsplit(d, 3) = 
[array([[ 1.,  2., 11., 12., 13.,  1.]]), array([[ 3.,  4., 14., 15., 16.,  1.]]), array([[ 5.,  6., 17., 18., 19.,  1.]])]


索引

接下來我們看看如何訪問NumPy數(shù)組中的數(shù)據(jù)。

同樣的,為了測試方便,我們先創(chuàng)建一個一維數(shù)組。它的內(nèi)容是 [100,200)區(qū)間的整數(shù)。

最基本的,我們可以通過array[index]的方式指定下標(biāo)來訪問數(shù)組的元素,這一點(diǎn)對于有一點(diǎn)編程經(jīng)驗的人來說應(yīng)該都是很熟悉的。


# array_index.py
import numpy as np
base_data = np.arange(100, 200)
print("base_data\n={}\n".format(base_data))
print("base_data[10] = {}\n".format(base_data[10]))


上面這段代碼輸出如下:


base_data
=[100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
 190 191 192 193 194 195 196 197 198 199]
base_data[10] = 110


在NumPy中,我們可以創(chuàng)建一個包含了若干個下標(biāo)的數(shù)組來獲取目標(biāo)數(shù)組中的元素。如下所示:


# array_index.py
every_five = np.arange(0, 100, 5)
print("base_data[every_five] = \n{}\n".format(
  base_data[every_five]))


every_five是包含了我們要獲取的下標(biāo)的數(shù)組,它的內(nèi)容大家應(yīng)該很容易理解。我們可以直接通過方括號的形式來獲取到所有我們指定了下標(biāo)的元素,它們?nèi)缦拢?/p>


base_data[every_five] = 
[100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185
 190 195]


下標(biāo)數(shù)組可以是一維的,當(dāng)然也可以是多維的。假設(shè)我們要獲取一個2X2的矩陣,這個矩陣的內(nèi)容來自于目標(biāo)數(shù)組中1,2,10,20這四個下標(biāo)的元素,則可以這樣寫:


# array_index.py
a = np.array([(1,2), (10,20)])
print("a = \n{}\n".format(a))
print("base_data[a] = \n{}\n".format(base_data[a]))


這段代碼輸出如下:


a = 
[[ 1 2]
 [10 20]]
base_data[a] = 
[[101 102]
 [110 120]]


上面我們看到的是目標(biāo)數(shù)組是一維的情況,下面我們把這個數(shù)組轉(zhuǎn)換成一個10X10的二維數(shù)組。


# array_index.py
base_data2 = base_data.reshape(10, -1)
print("base_data2 = np.reshape(base_data, (10, -1)) = \n{}\n".format(base_data2))


reshape函數(shù)前面已經(jīng)介紹過,大家應(yīng)該能夠想到它的結(jié)果:


base_data2 = np.reshape(base_data, (10, -1)) = 
[[100 101 102 103 104 105 106 107 108 109]
 [110 111 112 113 114 115 116 117 118 119]
 [120 121 122 123 124 125 126 127 128 129]
 [130 131 132 133 134 135 136 137 138 139]
 [140 141 142 143 144 145 146 147 148 149]
 [150 151 152 153 154 155 156 157 158 159]
 [160 161 162 163 164 165 166 167 168 169]
 [170 171 172 173 174 175 176 177 178 179]
 [180 181 182 183 184 185 186 187 188 189]
 [190 191 192 193 194 195 196 197 198 199]]


對于二維數(shù)組來說:

  • 假設(shè)我們只指定了一個下標(biāo),則訪問的結(jié)果仍然是一個數(shù)組。

  • 假設(shè)我們指定了兩個下標(biāo),則訪問得到的是其中的元素


我們也可以通過”-1”來指定“最后一個”的元素


# array_index.py
print("base_data2[2] = \n{}\n".format(base_data2[2]))
print("base_data2[2, 3] = \n{}\n".format(base_data2[2, 3]))
print("base_data2[-1, -1] = \n{}\n".format(base_data2[-1, -1]))


這段代碼輸出如下。

對于更高維的數(shù)組,原理是一樣的,讀者可以自行推理。


base_data2[2] = 
[120 121 122 123 124 125 126 127 128 129]
base_data2[2, 3] = 
123
base_data2[-1, -1] = 
199


除此之外,我們還可以通過”:“的形式來指定范圍,例如:2:5 這樣。只寫”:“則表示全部范圍。

請看下面這段代碼:


# array_index.py
print("base_data2[2, :]] = \n{}\n".format(base_data2[2, :]))
print("base_data2[:, 3]] = \n{}\n".format(base_data2[:, 3]))
print("base_data2[2:5, 2:4]] = \n{}\n".format(base_data2[2:5, 2:4]))



它的含義是:

  • 獲取下標(biāo)為2的行的所有元素

  • 獲取下標(biāo)為3的列的所有元素

獲取下標(biāo)為[2,5)行,下標(biāo)為[2,4)列的所有元素。請讀者仔細(xì)觀察一下下面的輸出結(jié)果:


base_data2[2, :]] = 
[120 121 122 123 124 125 126 127 128 129]
base_data2[:, 3]] = 
[103 113 123 133 143 153 163 173 183 193]
base_data2[2:5, 2:4]] = 
[[122 123]
 [132 133]
 [142 143]]



數(shù)學(xué)運(yùn)算

NumPy中自然也少不了大量的數(shù)學(xué)運(yùn)算函數(shù),下面是一些例子,更多的函數(shù)請參見這里NumPy manual contents:


# operation.py
import numpy as np
base_data = (np.random.random((5, 5)) - 0.5) * 100
print("base_data = \n{}\n".format(base_data))
print("np.amin(base_data) = {}".format(np.amin(base_data)))
print("np.amax(base_data) = {}".format(np.amax(base_data)))
print("np.average(base_data) = {}".format(np.average(base_data)))
print("np.sum(base_data) = {}".format(np.sum(base_data)))
print("np.sin(base_data) = \n{}".format(np.sin(base_data)))



這段代碼輸出如下:


base_data = 
[[ -9.63895991 6.9292461 -2.35654712 -48.45969283 13.56031937]
 [-39.75875796 -43.21031705 -49.27708561 6.80357128 33.71975059]
 [ 36.32228175 30.92546582 -41.63728955 28.68799187 6.44818484]
 [ 7.71568596 43.24884701 -14.90716555 -9.24092252 3.69738718]
 [-31.90994273 34.06067289 18.47830413 -16.02495202 -44.84625246]]

np.amin(base_data) = -49.277085606595726
np.amax(base_data) = 43.24884701268845
np.average(base_data) = -3.22680706079886
np.sum(base_data) = -80.6701765199715
np.sin(base_data) = 
[[ 0.21254814 0.60204578 -0.70685739 0.9725159 0.8381861 ]
 [-0.88287359 0.69755541 0.83514527 0.49721505 0.74315189]
 [-0.98124746 -0.47103234 0.7149727 -0.40196147 0.16425187]
 [ 0.99045239 -0.66943662 -0.71791164 -0.18282139 -0.5276184 ]
 [-0.4741657 0.47665553 -0.36278223 0.31170676 -0.76041722]]


矩陣

接下來我們看一下以矩陣的方式使用NumPy。

首先,我們創(chuàng)建一個5X5的隨機(jī)數(shù)整數(shù)矩陣。有兩種方式可以獲得矩陣的轉(zhuǎn)置:通過.T或者transpose函數(shù)。另外, 通過dot函數(shù)可以進(jìn)行矩陣的乘法,示例代碼如下:


# matrix.py

import numpy as np

base_data = np.floor((np.random.random((5, 5)) - 0.5) * 100)
print("base_data = \n{}\n".format(base_data))

print("base_data.T = \n{}\n".format(base_data.T))
print("base_data.transpose() = \n{}\n".format(base_data.transpose()))

matrix_one = np.ones((5, 5))
print("matrix_one = \n{}\n".format(matrix_one))

minus_one = np.dot(matrix_one, -1)
print("minus_one = \n{}\n".format(minus_one))

print("np.dot(base_data, minus_one) = \n{}\n".format(
 np.dot(base_data, minus_one)))
這段代碼輸出如下:

base_data = 
[[-49. -5. 11. -13. -41.]
 [ -6. -33. -33. -47. -4.]
 [-38. 26. 28. -18. 18.]
 [ -3. -19. -15. -39. 45.]
 [-43. 6. 18. -15. -21.]]

base_data.T = 
[[-49. -6. -38. -3. -43.]
 [ -5. -33. 26. -19. 6.]
 [ 11. -33. 28. -15. 18.]
 [-13. -47. -18. -39. -15.]
 [-41. -4. 18. 45. -21.]]

base_data.transpose() = 
[[-49. -6. -38. -3. -43.]
 [ -5. -33. 26. -19. 6.]
 [ 11. -33. 28. -15. 18.]
 [-13. -47. -18. -39. -15.]
 [-41. -4. 18. 45. -21.]]

matrix_one = 
[[ 1. 1. 1. 1. 1.]
 [ 1. 1. 1. 1. 1.]
 [ 1. 1. 1. 1. 1.]
 [ 1. 1. 1. 1. 1.]
 [ 1. 1. 1. 1. 1.]]

minus_one = 
[[-1. -1. -1. -1. -1.]
 [-1. -1. -1. -1. -1.]
 [-1. -1. -1. -1. -1.]
 [-1. -1. -1. -1. -1.]
 [-1. -1. -1. -1. -1.]]

np.dot(base_data, minus_one) = 
[[ 97. 97. 97. 97. 97.]
 [ 123. 123. 123. 123. 123.]
 [ -16. -16. -16. -16. -16.]
 [ 31. 31. 31. 31. 31.]
 [ 55. 55. 55. 55. 55.]]



隨機(jī)數(shù)

本文的最后,我們來看一下隨機(jī)數(shù)的使用。

隨機(jī)數(shù)是我們在編程過程中非常頻繁用到的一個功能。例如:生成演示數(shù)據(jù),或者將已有的數(shù)據(jù)順序隨機(jī)打亂以便分割出建模數(shù)據(jù)和驗證數(shù)據(jù)。

numpy.random 包中包含了很多中隨機(jī)數(shù)的算法。下面我們列舉四種最常見的用法:


# rand.py
import numpy as np
print("random: {}\n".format(np.random.random(20)));
print("rand: {}\n".format(np.random.rand(3, 4)));
print("randint: {}\n".format(np.random.randint(0, 100, 20)));
print("permutation: {}\n".format(np.random.permutation(np.arange(20))));


在四種用法分別是:

  1. 生成20個隨機(jī)數(shù),它們每一個都是[0.0, 1.0)之間

  2. 根據(jù)指定的shape生成隨機(jī)數(shù)

  3. 生成指定范圍內(nèi)([0, 100))的指定數(shù)量(20)的隨機(jī)整數(shù)

  4. 對已有的數(shù)據(jù)([0, 1, 2, ..., 19])的順序隨機(jī)打亂順序

這段代碼的輸出如下所示:


random: [0.62956026 0.56816277 0.30903156 0.50427765 0.92117724 0.43044905
 0.54591323 0.47286235 0.93241333 0.32636472 0.14692983 0.02163887
 0.85014782 0.20164791 0.76556972 0.15137427 0.14626625 0.60972522
 0.2995841 0.27569573]
rand: [[0.38629927 0.43779617 0.96276889 0.80018417]
 [0.67656892 0.97189483 0.13323458 0.90663724]
 [0.99440473 0.85197677 0.9420241 0.79598706]]
randint: [74 65 51 34 22 69 81 36 73 35 98 26 41 84 0 93 41 6 51 55]
permutation: [15 3 8 18 14 19 16 1 0 4 10 17 5 2 6 12 9 11 13 7]

相關(guān)推薦:

Python numpy 點(diǎn)數(shù)組去重

numpy中的軸與維度


以上是Python 機(jī)器學(xué)習(xí)庫 NumPy的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
PHP調(diào)用AI智能語音助手 PHP語音交互系統(tǒng)搭建 PHP調(diào)用AI智能語音助手 PHP語音交互系統(tǒng)搭建 Jul 25, 2025 pm 08:45 PM

用戶語音輸入通過前端JavaScript的MediaRecorderAPI捕獲并發(fā)送至PHP后端;2.PHP將音頻保存為臨時文件后調(diào)用STTAPI(如Google或百度語音識別)轉(zhuǎn)換為文本;3.PHP將文本發(fā)送至AI服務(wù)(如OpenAIGPT)獲取智能回復(fù);4.PHP再調(diào)用TTSAPI(如百度或Google語音合成)將回復(fù)轉(zhuǎn)為語音文件;5.PHP將語音文件流式返回前端播放,完成交互。整個流程由PHP主導(dǎo)數(shù)據(jù)流轉(zhuǎn)與錯誤處理,確保各環(huán)節(jié)無縫銜接。

如何用PHP結(jié)合AI實(shí)現(xiàn)文本糾錯 PHP語法檢測與優(yōu)化 如何用PHP結(jié)合AI實(shí)現(xiàn)文本糾錯 PHP語法檢測與優(yōu)化 Jul 25, 2025 pm 08:57 PM

要實(shí)現(xiàn)PHP結(jié)合AI進(jìn)行文本糾錯與語法優(yōu)化,需按以下步驟操作:1.選擇適合的AI模型或API,如百度、騰訊API或開源NLP庫;2.通過PHP的curl或Guzzle調(diào)用API并處理返回結(jié)果;3.在應(yīng)用中展示糾錯信息并允許用戶選擇是否采納;4.使用php-l和PHP_CodeSniffer進(jìn)行語法檢測與代碼優(yōu)化;5.持續(xù)收集反饋并更新模型或規(guī)則以提升效果。選擇AIAPI時應(yīng)重點(diǎn)評估準(zhǔn)確率、響應(yīng)速度、價格及對PHP的支持。代碼優(yōu)化應(yīng)遵循PSR規(guī)范、合理使用緩存、避免循環(huán)查詢、定期審查代碼,并借助X

python seaborn關(guān)節(jié)圖示例 python seaborn關(guān)節(jié)圖示例 Jul 26, 2025 am 08:11 AM

使用Seaborn的jointplot可快速可視化兩個變量間的關(guān)系及各自分布;2.基礎(chǔ)散點(diǎn)圖通過sns.jointplot(data=tips,x="total_bill",y="tip",kind="scatter")實(shí)現(xiàn),中心為散點(diǎn)圖,上下和右側(cè)顯示直方圖;3.添加回歸線和密度信息可用kind="reg",并結(jié)合marginal_kws設(shè)置邊緣圖樣式;4.數(shù)據(jù)量大時推薦kind="hex",用

PHP集成AI情感計算技術(shù) PHP用戶反饋智能分析 PHP集成AI情感計算技術(shù) PHP用戶反饋智能分析 Jul 25, 2025 pm 06:54 PM

要將AI情感計算技術(shù)融入PHP應(yīng)用,核心是利用云服務(wù)AIAPI(如Google、AWS、Azure)進(jìn)行情感分析,通過HTTP請求發(fā)送文本并解析返回的JSON結(jié)果,將情感數(shù)據(jù)存入數(shù)據(jù)庫,從而實(shí)現(xiàn)用戶反饋的自動化處理與數(shù)據(jù)洞察。具體步驟包括:1.選擇適合的AI情感分析API,綜合考慮準(zhǔn)確性、成本、語言支持和集成復(fù)雜度;2.使用Guzzle或curl發(fā)送請求,存儲情感分?jǐn)?shù)、標(biāo)簽及強(qiáng)度等信息;3.構(gòu)建可視化儀表盤,支持優(yōu)先級排序、趨勢分析、產(chǎn)品迭代方向和用戶細(xì)分;4.應(yīng)對技術(shù)挑戰(zhàn),如API調(diào)用限制、數(shù)

python列表到字符串轉(zhuǎn)換示例 python列表到字符串轉(zhuǎn)換示例 Jul 26, 2025 am 08:00 AM

字符串列表可用join()方法合并,如''.join(words)得到"HelloworldfromPython";2.數(shù)字列表需先用map(str,numbers)或[str(x)forxinnumbers]轉(zhuǎn)為字符串后才能join;3.任意類型列表可直接用str()轉(zhuǎn)換為帶括號和引號的字符串,適用于調(diào)試;4.自定義格式可用生成器表達(dá)式結(jié)合join()實(shí)現(xiàn),如'|'.join(f"[{item}]"foriteminitems)輸出"[a]|[

python pandas融化示例 python pandas融化示例 Jul 27, 2025 am 02:48 AM

pandas.melt()用于將寬格式數(shù)據(jù)轉(zhuǎn)為長格式,答案是通過指定id_vars保留標(biāo)識列、value_vars選擇需融化的列、var_name和value_name定義新列名,1.id_vars='Name'表示Name列不變,2.value_vars=['Math','English','Science']指定要融化的列,3.var_name='Subject'設(shè)置原列名的新列名,4.value_name='Score'設(shè)置原值的新列名,最終生成包含Name、Subject和Score三列

優(yōu)化用于內(nèi)存操作的Python 優(yōu)化用于內(nèi)存操作的Python Jul 28, 2025 am 03:22 AM

pythoncanbeoptimizedFormized-formemory-boundoperationsbyreducingOverHeadThroughGenerator,有效dattratsures,andManagingObjectLifetimes.first,useGeneratorSInsteadoFlistSteadoflistSteadoFocessLargedAtasetSoneItematatime,desceedingingLoadeGingloadInterveringerverneDraineNterveingerverneDraineNterveInterveIntMory.second.second.second.second,Choos,Choos

Python連接到SQL Server PYODBC示例 Python連接到SQL Server PYODBC示例 Jul 30, 2025 am 02:53 AM

安裝pyodbc:使用pipinstallpyodbc命令安裝庫;2.連接SQLServer:通過pyodbc.connect()方法,使用包含DRIVER、SERVER、DATABASE、UID/PWD或Trusted_Connection的連接字符串,分別支持SQL身份驗證或Windows身份驗證;3.查看已安裝驅(qū)動:運(yùn)行pyodbc.drivers()并篩選含'SQLServer'的驅(qū)動名,確保使用如'ODBCDriver17forSQLServer'等正確驅(qū)動名稱;4.連接字符串關(guān)鍵參數(shù)

See all articles