Python 第三方模塊之 NumPy - 科學計算

NumPy 簡介

NumPy?發展歷史

  1. 1995年 Jim HugUNin開發了Numeric。
  2. 隨后,Numarray包誕生。
  3. Travis Oliphants整合Numeric和Numarray,開發Numpy,于2006年發布第一個版本。
  4. Numpy(Numeric Python)提供了許多高級的數值編程工具,如:矩陣數據類型、矢量處理,以及精密的運算庫。專為進行嚴格的數字處理而產生。多為很多大型金融公司使用,以及核心的科學計算組織如:Lawrence Livermore,NASA用其處理一些本來使用C++,Fortran或Matlab等所做的任務。
  5. 使用Anaconda發行版的Python,已經幫我們事先安裝好了Numpy模塊,因此無需另外安裝。
  6. 依照標準的Numpy約定,習慣使用 import numpy as np方式導入該模塊。

NumPy模塊

numPyNumerical Python,即數值Python包,是Python進行科學計算的一個基礎包,所以是一個掌握其他Scipy庫中模塊的基礎模塊,一定需要先掌握該包的主要使用方式。

  • 官網:http://www.numpy.org/
  • 官方文檔:https://docs.scipy.org/doc/numpy/user/index.html

NumPy?、Scipy、Pandasmatplotlib簡介

  1. NumPy?——基礎,以矩陣為基礎的數學計算模塊,純數學存儲和處理大型矩陣。??這個是很基礎的擴展,其余的擴展都是以此為基礎。

  2. Scipy——數值計算庫,在NumPy?庫的基礎上增加了眾多的數學、科學以及工程計算中常用的庫函數。??方便、易于使用、專為科學和工程設計的Python工具包.它包括統計,優化,整合,線性代數模塊,傅里葉變換,信號和圖像處理,常微分方程求解器等等。
  3. Pandas——數據分析,基于NumPy? 的一種工具,為了解決數據分析任務而創建的.Pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。
  4. matplotlib——繪圖,對于圖像美化方面比較完善,可以自定義線條的顏色和式樣,可以在一張繪圖紙上繪制多張小圖,也可在一張圖上繪制多條線,可以很方便的對數據進行可視化分析。

NumPy核心數據結構:ndarray

NumPy的數組類被稱作ndarray。通常被稱作數組。注意numpy.array和標準Python庫類array.array并不相同,后者只處理一維數組和提供少量功能。

一種由相同類型的元素組成的多維數組,元素數量是實現給定好的

元素的數據類型由dtype(data-type)對象來指定,每個ndarray只有一種dtype類型

ndarray的大小固定,創建好數組后數組大小是不會再發生改變的

ndarray創建

函數創建

array:接收一個普通的python序列,并將其轉換為ndarray

print(np.array([1,2,3]))    # 用列表創建一維數組
print(np.array((1,2,3)))    # 用元組創建一維數組
print(np.array([[1,2,3],[3,4,5]])) 	# 創建二維數組
print(np.array([[[1,2,3],[3,4,5]], [[4,5,6],[7,8,9]]]))  # 創建三維數組# [1 2 3]# [1 2 3]  # [[1 2 3]
# [3 4 5]] # [[[1 2 3]
# [3 4 5]]
# [[4 5 6]
# [7 8 9]]]

zeros函數:創建指定長度或者形狀的全零數組

print(np.zeros((3,4)))# [[0. 0. 0. 0.]
# [0. 0. 0. 0.]
# [0. 0. 0. 0.]]

ones函數:創建指定長度或者形狀的全1數組。

print(np.ones((3,4)))# [[1. 1. 1. 1.]
# [1. 1. 1. 1.]
# [1. 1. 1. 1.]]

empty函數:創建一個沒有任何具體值的數組(準備地說是創建一些未初始化的ndarray多維數組)

print(np.empty((3,4)))# [[6.23042070e-307 3.56043053e-307 1.37961641e-306 6.23039354e-307]
#  [6.23053954e-307 9.34609790e-307 8.45593934e-307 9.34600963e-307]
#  [1.86921143e-306 6.23061763e-307 9.34608432e-307 4.24399158e-314]]

其他方式:

arange函數: 類似python的range函數,通過指定開始值、終值和步長來創建一個一維數組,注意:最終創建的數組不包含終值

print(np.arange(9))      # 一個參數時代表是n值
print(np.arange(0,9,3))  # 起始值,終值,步長

linspace函數:通過指定開始值、終值和元素個數來創建一個一維數組,數組的數據元素符合等差數列,可以通過endpoint關鍵字指定是否包含終值,默認包含終值

print(np.linspace(0,8,5)) # 形成一個0到8之間的等差數列,共5個元素
# [0. 2. 4. 6. 8.]

logspace函數:和linspace函數類似,不過創建的是等比數列數組

print(np.logspace(0, 2, 5))  # 范圍1-10**2,5個元素
print(np.logspace(0, 5, 6, base=2))  # 范圍 1-2**5,6個元素,base是底# [  1.           3.16227766  10.          31.6227766  100.        ]
# [ 1.  2.  4.  8. 16. 32.]

np.random.randint((m,n,size=(a,b))):創建隨機整數數組,選值的范圍是[m,n); a是數組的行;b是數組的列數

print(np.random.randint(1,9, size=(3,4)))# [[1 2 3 5]
#  [1 6 2 7]
#  [8 6 4 6]]

np.random.random((m,n,p)):創建隨機數組,范圍0-1之間,m為維數,默認為1; n為行數,默認為1; p為列數,默認為1

print(np.random.random())
print(np.random.random((3,3)))
print(np.random.random((3,4,5)))0.488869811358302[[0.04233258 0.3131225  0.68944938][0.87059721 0.67384851 0.15279566][0.55984723 0.93180875 0.94961102]][[[0.59919237 0.1994035  0.51349683 0.74415431 0.08967972][0.51202792 0.90590204 0.72763875 0.28438195 0.74681998][0.83841345 0.58347337 0.11484284 0.55444849 0.7978348 ][0.28018216 0.01040884 0.57392768 0.2434304  0.59227622]][[0.5430919  0.42146133 0.14726534 0.03191174 0.26208523][0.09970413 0.42386556 0.91181302 0.98131496 0.80365805][0.45376739 0.83388326 0.44127547 0.09819375 0.7977529 ][0.94739682 0.70020476 0.21155345 0.42489893 0.99906962]][[0.91776003 0.10385849 0.52768841 0.79937635 0.69065729][0.00796977 0.77475184 0.37661829 0.86323215 0.48432327][0.26268683 0.51724413 0.24022605 0.08388501 0.30099232][0.09245234 0.07751062 0.77418801 0.43640313 0.99036787]]]

?np.random.randn(m,n):創建一個標準正態分布的數組,m表示行數;n表示列數。

print(np.random.randn(3,2))
# [[ 0.10110133 -0.23799349]
#  [ 0.44611654  2.52476781]
#  [-0.52620207 -1.42422191]]

ndarray對象屬性

  • ndim 數組軸(維度)的個數,軸的個數被稱作秩
  • shape 數組的維度, 例如一個2排3列的矩陣,它的shape屬性將是(2,3),這個元組的長度顯然是秩,即維度或者ndim屬性
  • size 數組元素的總個數,等于shape屬性中元組元素的乘積。
  • dtype 一個用來描述數組中元素類型的對象,可以通過創造或指定dtype使用標準Python類型。不過NumPy提供它自己的數據類型。
  • itemsize 數組中每個元素的字節大小。例如,一個元素類型為float64的數組itemsiz屬性值為8(=64/8),又如,一個元素類型為complex32的數組item屬性為4(=32/8).
arr = np.random.randint(1, 9, size=(3,3))
print(arr.ndim)       # 2
print(arr.shape)      # (3, 3)
print(arr.dtype)      # int32
print(arr.size)       # 9
print(arr.itemsize)   # 4

NumPy基本數據類型

數據類型

類型簡 寫

說明

int_

?

默認整形

intc

?

等價于long的整形

int8

i1

字節整形,1個字節,范圍:[-128,127]

int16

i2

整形,2個字節,范圍:[-32768,32767]

int32

i3

整形,4個字節,范圍:[-2^31, 2^31-1]

int64

i4

整形,8個字節,范圍:[-2^63, 2^63-1]

uint8

u1

無符號整形, 1個字節, 范圍:[0,255]

uint16

u2

無符號整形, 2個字節, 范圍:[0,65535]

uint32

u3

無符號整形, 1個字節, 范圍:[0, 2^32-1]

uint64

u4

無符號整形, 1個字節, 范圍:[0,2^64-1]

bool_

?

以一個字節形成存儲的布爾值(True或者False)

float_

?

float64簡寫形式

float16

f2

半精度浮點型(2字節)1符號位+5位指數+10位的小數部分

float32

f4或者f

單精度浮點型(4字節)1符號位+8位指數+23位的小數部分

float64

f8或者d

雙精度浮點型(8字節)1符號位+11位指數+52位的小數部分

complex_

c16

complex128的簡寫形式

complex64

c8

復數,由兩個32位的浮點數來表示

complex128

c16

復數,由兩個64位的浮點數來表示

object

O

Python對象類型

String_

S

固定長度的字符串類型(每個字符1個字節),比如:要創建一個長度為8的字符串,應該使用S8

Unicode_

U

固定長度的unicode類型的字符串(每個字符占用字節數由平臺決定),長度定義類似String_類型

ndarray修改類型

創建numpy數組的時候可以通過屬性dtype顯示指定數據類型,如果不指定的情況下,numpy會自動推斷出適合的數據類型,所以一般不需要顯示給定數據類型。

?如果需要更改一個已經存在的數組的數據類型,可以通過astype方法進行修改從而得到一個新數組

arr = np.random.randint(1, 9, size=(3,3))
print(arr.dtype)          # int32
arr2 = arr.astype(float)
print(arr2.dtype)         # float64

數值型dtype的命名方式為:一個類型名稱(eg:int、float等),后接一個表示各個元素位長的數字。比如Python的float數據類型(雙精度浮點值),需要占用8個字節(64位),因此在NumPy中記為float64。每個數據類型都有一個類型代碼,即簡寫方式

arr3 = np.random.randint(1, 9, size=(3,3), dtype='i8')
print(arr3.dtype) # int64

ndarray修改形狀

對于一個已經存在的ndarray數組對象而言,可以通過修改形狀相關的參數/方法從而改變數組的形狀。

直接修改數組ndarray的shape值, 要求修改后乘積不變。

直接使用reshape函數創建一個改變尺寸的新數組,原數組的shape保持不變,但是新數組和原數組共享一個內存空間,也就是修改任何一個數組中的值都會對另外一個產生影響,另外要求新數組的元素個數和原數組一致。

當指定某一個軸為-1的時候,表示將根據數組元素的數量自動計算該軸的長度值。

arr = np.array([1,2,3,4,5,6,7,8])
print(arr.reshape(2,4))
arr = np.array([1,2,3,4,5,6,7,8])
print(arr.reshape(2,-1))# [[1 2 3 4]
#  [5 6 7 8]]
# [[1 2 3 4]
#  [5 6 7 8]]

NumPy基本操作

數組與標量、數組之間的運算

數組不用循環即可對每個元素執行批量的算術運算操作,這個過程叫做矢量化,即用數組表達式代替循環的做法。

矢量化數組運算性能比純Python方式快上一兩個數據級。

大小相等的兩個數組之間的任何算術運算都會將其運算應用到元素級上的操作。

元素級操作:在NumPy中,大小相等的數組之間的運算,為元素級運算,即只用于位置相同的元素之間,所得的運算結果組成一個新的數組,運算結果的位置跟操作數位置相同。

# 數組和標量運算
arr1 = np.array((1,2,3,4,5))
print(arr1+2)   # [3 4 5 6 7]
print(arr1-3)   # [-2 -1  0  1  2]
print(arr1*2)   # [ 2  4  6  8 10]
print(arr1/2)   # [0.5 1.  1.5 2.  2.5]
print(arr1**2)  # [ 1  4  9 16 25]
print(2**arr1)  # [ 2  4  8 16 32]
# 數組和數組運算
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
arr3 = np.array([[10, 20, 30], [40, 50, 60]])
print(arr2+arr3)  # 相乘的兩者結構相同
print(arr2*arr3)
print(arr2**arr3)# [[11 22 33]
#  [44 55 66]]
# [[ 10  40  90]
#  [160 250 360]]
# [[          1     1048576 -1010140999]
#  [          0  1296002393           0]]

數組的矩陣積(matrix product)

矩陣積(matrix product):兩個二維矩陣(行和列的矩陣)滿足第一個矩陣的列數與第二個矩陣的行數相同,那么可以進行矩陣的乘法,即矩陣積,矩陣積不是元素級的運算。也稱為點積、數量積。

arr1 = np.array(((1, 2, 3),(4, 5, 6),(7, 8, 9)))
arr2 = np.array(((1, 2),(3, 4),(5, 6)))
print(np.dot(arr1,arr2))
print(arr1.dot(arr2))# [[ 22  28]
#  [ 49  64]
#  [ 76 100]]# [[ 22  28]
#  [ 49  64]
#  [ 76 100]]

數組的索引與切片

ndarray-多維數組的索引

根據數組的形狀,進行索引

arr2 = np.arange(27).reshape(3, 3, 3)
print(arr2)
print(arr2[0])  # 一維索引
print(arr2[0][1])  # 一維,二維
print(arr2[0][1][2])  # 一維,二維,三維
print(arr2[0, 1, 2])  # 推薦寫法# [[[ 0  1  2]
#   [ 3  4  5]
#   [ 6  7  8]]
#  [[ 9 10 11]
#   [12 13 14]
#   [15 16 17]]
#  [[18 19 20]
#   [21 22 23]
#   [24 25 26]]]# [[0 1 2]
#  [3 4 5]
#  [6 7 8]]# [3 4 5]# 5# 5

切片

在各維度上單獨切片,如果某維度數據都保留,直接使用冒號,不指定起始值和終值

從Numpy切片得到的數組,只是原來數組的一個視圖,內部數據使用相同的存儲地址,所以對切片得到的數組修改會影響原數組

print(arr2[0:2, 1, :])# [[ 3  4  5]
#  [12 13 14]]

布爾類型索引

利用布爾類型的數組進行數據索引,最終返回的結果是對應索引數組中數據為True位置的值。

ndarray-花式索引

花式索引(Fancy indexing)指的是利用整數數組進行索引的方式

import numpy as nparr1 = np.arange(32).reshape(8, 4)
print(arr1)
print("========= 獲取 0,3,5 行的數據 =========")
print(arr1[[0, 3, 5]])
print("========= 獲取 (0,0),(3,2),(5,2) 的數據 =========")
print(arr1[[0, 3, 5], [0, 2, 2]])
print("========= 獲取 0,3,5 行 0,2,3 列的數據 =========")
print(arr1[[0, 3, 5]].T[[0, 2, 3]].T)
print(arr1[np.ix_([0, 3, 5], [0, 2, 3])])# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [12 13 14 15]
#  [16 17 18 19]
#  [20 21 22 23]
#  [24 25 26 27]
#  [28 29 30 31]]
# ========= 獲取 0,3,5 行的數據 =========
# [[ 0  1  2  3]
#  [12 13 14 15]
#  [20 21 22 23]]
# ========= 獲取 (0,0),(3,2),(5,2) 的數據 =========
# [ 0 14 22]
# ========= 獲取 0,3,5 行 0,2,3 列的數據 =========
# [[ 0  2  3]
#  [12 14 15]
#  [20 22 23]]
# [[ 0  2  3]
#  [12 14 15]
#  [20 22 23]]

數組的轉置與軸對換

數組轉置是指將shape進行重置操作,并將其值重置為原始shape元組的倒置,比如原始的shape值為:(2,3,4),那么轉置后的新元組的shape的值為: (4,3,2)f

對于二維數組而言(矩陣)數組的轉置其實就是矩陣的轉置

可以通過調用數組的transpose函數或者T屬性進行數組轉置操作

arr1 = np.arange(20).reshape(5,-1)
print(arr1)
arr2 = arr1.transpose()
print(arr2)
arr3 = arr1.T
print(arr3)#################
[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11][12 13 14 15][16 17 18 19]]
#################
[[ 0  4  8 12 16][ 1  5  9 13 17][ 2  6 10 14 18][ 3  7 11 15 19]]
#################
[[ 0  4  8 12 16][ 1  5  9 13 17][ 2  6 10 14 18][ 3  7 11 15 19]]

通用函數:快速的元素級數組成函數

ufunc:numpy模塊中對ndarray中數據進行快速元素級運算的函數,也可以看做是簡單的函數(接受一個或多個標量值,并產生一個或多個標量值)的矢量化包裝器。

主要包括一元函數和二元函數

ndarray-通用函數/常用函數(一元函數)

一元ufunc

描述

調用方式

abs, fabs

計算整數、浮點數或者復數的絕對值,對于非復數,可以使用更快的fabs

np.abs(arr)

np.fabs(arr)

sqrt

計算各個元素的平方根,相當于arr ** 0.5, 要求arr的每個元素必須是非負數

np.sqrt(arr)

square

計算各個元素的評分,相當于arr ** 2

np.square(arr)

exp

計算各個元素的指數ex次方

np.exp(arr)

loglog10

log2log1p

分別計算自然對數、底數為10log、底數為2log以及log(1+x);要求arr中的每個元素必須為正數

np.log(arr)

np.log10(arr)

np.log2(arr)

np.log1p(arr)

sign

計算各個元素的正負號: 1 正數,0:零,-1:負數

np.sign(arr)

ceil

計算各個元素的ceiling值,即大于等于該值的最小整數

np.ceil(arr)

floor

計算各個元素的floor值,即小于等于該值的最大整數

np.floor(arr)

rint

將各個元素值四舍五入到最接近的整數,保留dtype的類型

np.rint(arr)

modf

將數組中元素的小數位和整數位以兩部分獨立數組的形式返回

np.modf(arr)

isnan

返回一個表示那些值是NaN(不是一個數字)”的布爾類型數組

np.isnan(arr)

isfiniteisinf

分別一個表示那些元素是有窮的(inf、非NaN)”或者那些元素是無窮的的布爾型數組

np.isfinite(arr)

np.isinf(arr)

coscoshsin

sinhtantanh

普通以及雙曲型三角函數

np.cos(arr)

np.sin(arr)

np.tan(arr)

arccosarccosh

arcsin、arcsinh、

arctanarctanh

反三角函數

np.arccos(arr)

np.arrsin(arr)

np.arrtan(arr)

ndarray-通用函數/常用函數(二元函數)

二元ufunc

描述

調用方式

mod

元素級的取模

np.mod(arr1,arr2)

dot

求兩個數組的點積

np.dot(arr1,arr2)

greatergreater_equalless

less_equalequalnot_equal

執行元素級別的比較運算,最終返回一個布爾型數組

np.greater(arr1, arr2)

np.less(arr1, arr2)

np.equal(arr1, arr2)

logical_andlogical_or

logical_xor

執行元素級別的布爾邏輯運算,相當于中綴運算符&|^

np.logical_and(arr1,arr2)

np.logical_or(arr1,arr2)

np.logical_xor(arr1,arr2)

power

求解對數組中的每個元素進行給定次數的指數值,類似于: arr ** 3

np.power(arr, 3)

聚合函數

聚合函數是對一組值(eg一個數組)進行操作,返回一個單一值作為結果的函數。當然聚合函數也可以指定對某個具體的軸進行數據聚合操作;常將的聚合操作有:平均值、最大值、最小值、方差等等

當axis=0表示列;axis=1表示行,不寫代表計算整個矩陣的

arr = np.array([[1, 5, 7, 4], [0, 6, 3, 8], [2, 6, 9, 7]])
print(arr)
print('arr的最小值是:', arr.min())
print('arr的最大值是:', arr.max())
print('arr的平均值是:', arr.mean())
print('arr的標準差差是:', arr.std())
print('arr的方差是:', np.power(arr.std(),2))
print('arr中每一列的最小值是:', arr.min(axis=0))  # 當axis=0表示列;axis=1表示行
print('arr中每一列的最大值是:', arr.max(axis=0))
print('arr中每一列的平均值是:', arr.mean(axis=0))
print('arr中每一行的最小值是:', arr.min(axis=1))
print('arr中每一行的最大值是:', arr.max(axis=1))
print('arr中每一行的平均值是:', arr.mean(axis=1))###############################################################################
[[1 5 7 4][0 6 3 8][2 6 9 7]]
arr的最小值是: 0
arr的最大值是: 9
arr的平均值是: 4.833333333333333
arr的標準差差是: 2.733536577809454
arr的方差是: 7.472222222222221
arr中每一列的最小值是: [0 5 3 4]
arr中每一列的最大值是: [2 6 9 8]
arr中每一列的平均值是: [1.         5.66666667 6.33333333 6.33333333]
arr中每一行的最小值是: [1 0 2]
arr中每一行的最大值是: [7 8 9]
arr中每一行的平均值是: [4.25 4.25 6.  ]

np.where函數

np.where函數是三元表達式x if condition else y的矢量化版本

arr1 = np.array([-1.1,-1.2,-1.3,-1.4,-1.5])
arr2 = np.array([-2.1,-2.2,-2.3,-2.4,-2.5])
condition = (arr1<arr2)
result1 = [x if c else y for (x,y,c) in zip(arr1, arr2, condition)]  # 用于一維數組,不能用于多維
result2 = np.where(condition, arr1, arr2)  # 適合任何維度
print('使用python語法,結果為:', result1,';數據類型為:', type(result1))
print('使用np.where語法,結果為:', result2,';數據類型為:', type(result2))# 使用python語法,結果為: [-2.1, -2.2, -2.3, -2.4, -2.5] ;數據類型為: <class 'list'>
# 使用np.where語法,結果為: [-2.1 -2.2 -2.3 -2.4 -2.5] ;數據類型為: <class 'numpy.ndarray'>

將數組中的所有異常數字替換為0,比如將NaN替換為0

arr3 = np.array([
[1, 2, np.nan, 4],
[4, 5, 6, np.nan],
[7, 8, 9, np.inf],
[np.inf, np.e, np.pi, 4]
])
condition = np.isnan(arr3)|np.isinf(arr3)
print(arr3)
print(np.where(condition, 0, arr3))##############################################################3
[[1.         2.                nan 4.        ][4.         5.         6.                nan][7.         8.         9.                inf][       inf 2.71828183 3.14159265 4.        ]]
[[1.         2.         0.         4.        ][4.         5.         6.         0.        ][7.         8.         9.         0.        ][0.         2.71828183 3.14159265 4.        ]]

np.unique函數

np.unique函數的主要作用是將數組中的元素進行去重操作(也就是只保存不重復的數據)

arr1 = np.array(['a', 'b', 'c', 'a', 'd', 'c', 'e'])
arr2 = np.unique(arr1)
print('原始數據:', arr1)
print('去重之后的數據:', arr2)# 原始數據: ['a' 'b' 'c' 'a' 'd' 'c' 'e']
# 去重之后的數據: ['a' 'b' 'c' 'd' 'e']

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454231.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454231.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454231.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

keepalived與lvs結合使用配置實例

keepalived可以實現兩大功能是&#xff1a;健康檢測和故障轉移 keepalived.conf的配置 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950global_defs {notification_email { acassenfirewall.loc failoverfirewall.loc sysadminf…

保證你現在和未來不失業的十種關鍵技術

在當今的IT就業市場&#xff0c;有人歡喜有人憂。有人對目前的工作和薪水很滿意&#xff0c;有人目前正面臨著下崗&#xff0c;或者已經下崗…… 可能你是公司里唯一諳熟某項關鍵技術的高手&#xff0c;缺了你&#xff0c;公司便玩不轉了&#xff1b;也可能你所在的公司對你現…

python設置時間步長與時間離散格式_python怎么定義時間

Python 的 Decorator在使用上和Java/C#的Annotation很相似&#xff0c;就是在方法名前面加一個XXX注解來為這個方法裝飾一些東西。但是&#xff0c;Java/C#的Annotation也很讓人望而卻步&#xff0c;太TMD的復雜了&#xff0c;你要玩它&#xff0c;你需要了解一堆Annotation的類…

Python 第三方模塊之 matplotlib - 繪圖庫

簡介 matplotlib是受MATLAB的啟發構建的。MATLAB是數據繪圖領域廣泛使用的語言和工具。MATLAB語言是面向過程的。利用函數的調用&#xff0c;MATLAB中可以輕松的利用一行命令來繪制直線&#xff0c;然后再用一系列的函數調整結果。 matplotlib有一套完全仿照MATLAB的函數形式…

python 筆記(三) 斷言(assert)

用來調試程序的時候用&#xff0c;當程序有誤時&#xff0c;強制拋出異常轉載于:https://www.cnblogs.com/wangkeblog/p/7746022.html

網站程序員的程序員成長之路大概分幾個階段 和未來的發展

信息技術的更新速度是驚人的&#xff0c;程序員的職業生涯則是一個要求不斷學習的過程&#xff0c;如何才能成為一名合格的程序員&#xff0c;一名合格的程序員需要掌握哪些技能呢&#xff1f;為此天天招生網采訪到幾位孳生的程序工作人員&#xff0c;就如何做好一名成功的程序…

微軟P2V工具之Disk2VHD

虛擬化經過最近幾年的發展&#xff0c;已經有很多的應用和服務遷移到了虛擬化的平臺上了。在實施虛擬化的過程中就會涉及到將原來老舊的服務器來遷移到虛擬化平臺的運行&#xff0c;這就是P2V&#xff0c;物理機轉換為虛擬機。談到P2V大家會想到很多的工具&#xff0c;例如Vmwa…

生成n套數位加減乘除_leetcode 算法匯總(四)位運算

一、 運算符& 與運算&#xff1a; 兩個位都是 1 時&#xff0c;結果才為 1&#xff0c;否則為 0| 或運算&#xff1a; 兩個位都是 0 時&#xff0c;結果才為 0&#xff0c;否則為 1^ 異或運算&#xff1a; 兩個位相同則為 0&#xff0c;不同則為 1~ 取反運算&#xff1a;0 …

機器學習算法之 K-means、層次聚類,譜聚類

k-means 和層次聚類都屬于劃分聚類&#xff0c;實際中最常用的是k-means&#xff0c;k-means效果不好的情況下才會采用其他聚類 K-means算法 K-means算法&#xff0c;也稱為K-平均或者K-均值&#xff0c;是一種使用廣泛的最基礎的聚類算法 假設輸入樣本為TX1,X2,…,Xm;則算法…

vue數據請求

我是vue菜鳥&#xff0c;第一次用vue做項目&#xff0c;寫一些自己的理解&#xff0c;可能有些不正確&#xff0c;歡迎糾正。 vue開發環境要配置本地代理服務。把config文件加下的index.js里的dev添加一些內容&#xff0c; dev: {env: require(./dev.env),port: 8090,autoOpenB…

jetty部署多個web應用及將jetty配置成服務

通常情況下一個jetty部署一個java web應用&#xff0c;但一臺服務只部署一個應用可能會造成資源浪費&#xff0c;所以有時候可能在一臺服務器上要部署多個web應用。下面我們以一臺server部署兩個web應用為例。 服務器環境&#xff1a;安裝JDK&#xff0c;2個jetyy9 重點&#x…

程序員成長的10個階段

我的程序員成長之路 程序員的成長經歷往往很相似&#xff0c;大部分的人走過了最前面相同的一段路&#xff0c;而有的人則走得更遠。總結自己這些年來的歷程&#xff0c;這也許能讓年輕的程序員少走一些彎路&#xff0c;成長得更快&#xff1b;或許更好一些&#xff0c;能讓大家…

mapper注解的主要作用_Mybatis中mapper的xml解析詳解

上一篇文章分析了mapper注解關鍵類MapperAnnotationBuilder&#xff0c;今天來看mapper的項目了解析關鍵類XMLMapperBuilder。基礎介紹回顧下之前是在分析configuration的初始化過程&#xff0c;已經進行到了最后一步mapperElement(root.evalNode("mappers"))&#x…

機器學習之梯度下降法(GD)和坐標軸下降法(CD)

梯度下降法 梯度下降法&#xff08;Gradient Descent, GD&#xff09;常用于求解無約束情況下凸函數&#xff08;Convex Function&#xff09;的極小值&#xff0c;是一種迭代類型的算法&#xff0c;因為凸函數只有一個極值點&#xff0c;故求解出來的極小值點就是函數的最小值…

阿里云Https部署網站

0、開始之前 文章圖片很多&#xff0c;注意流量 首先你得準備好一個已經備案成功的域名&#xff0c;并且有一個在阿里云的服務器部署了的網站。 然后就是你迫切的希望升級網站為HTTPS部署。 那么我們開始吧&#xff01; 1、申請CA證書 1.1登錄阿里云控制臺&#xff0c;選擇菜單…

mysql數據庫多實例部署

本文系統&#xff1a;rhel5.8 ip : 192.168.100.150 數據庫版本&#xff1a;mysql-5.6.15 1、創建部署mysql服務賬號&#xff1a; 1234[rootdaf ~]# useradd -d /opt/mysql mysql [rootdaf ~]# echo "mysql" |passwd --stdin mysql Changing password for user mysq…

Python 第三方模塊之 numpy.linalg - 線性代數

目錄 numpy.linalg.det() 行列式 numpy.linalg.solve() 方程的解 numpy.linalg.inv() 逆矩陣 np.linalg.eig 特征值和特征向量 np.linalg.svd 奇異值分解 np.linalg.pinv 廣義逆矩陣&#xff08;QR分解&#xff09; numpy.linalg模塊包含線性代數的函數。使用這個模塊&am…

rabbitmq direct 多個消費者_一文解析 RabbitMQ 最常用的三大模式

Direct 模式所有發送到 Direct Exchange 的消息被轉發到 RouteKey 中指定的 Queue。Direct 模式可以使用 RabbitMQ 自帶的 Exchange: default Exchange&#xff0c;所以不需要將 Exchange 進行任何綁定(binding)操作。消息傳遞時&#xff0c;RouteKey 必須完全匹配才會被隊列接…

程序員成長最快的環境

除開五大或者ThoughtWorks這種要什么有什么&#xff0c;進去做打字也能光耀門楣的不談。如果是嫁到一個普通軟件公司&#xff0c;怎樣的環境才能最快的成長呢&#xff1f;首先基本的 公司項目管理水平是必要的&#xff1b;其次是穩健而不保守的公司技術選型和一班能溝通的同事。…

【BZOJ4254】Aerial Tramway 樹形DP

【BZOJ4254】Aerial Tramway 題意&#xff1a;給你一座山上n點的坐標&#xff0c;讓你在山里建m條纜車&#xff0c;要求纜車兩端的高度必須相等&#xff0c;且中間經過的點的高度都小于纜車的高度。并且不能存在一個點位于至少k條纜車的下方。求纜車的最大總長度。 n,m<200,…