久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

收藏&下載 | 最全的NumPy 教程,,沒有之一

 liqualife 2019-12-27

譯者:飛龍     鏈接:

https://www.jianshu.com/p/57e3c0a92f3a

原文:https://www./numpy/index.htm

友情提示:本文較長,是教程的一部分,,值得收藏,,文末提供下載方式哦,!覺得內(nèi)容精彩一定要點一下“好看”哦,!

NumPy - 簡介

NumPy 是一個 Python 包,。它代表 “Numeric Python”。它是一個由多維數(shù)組對象和用于處理數(shù)組的例程集合組成的庫,。

Numeric,,即 NumPy 的前身,是由 Jim Hugunin 開發(fā)的,。也開發(fā)了另一個包 Numarray ,,它擁有一些額外的功能。2005年,,Travis Oliphant 通過將 Numarray 的功能集成到 Numeric 包中來創(chuàng)建 NumPy 包,。這個開源項目有很多貢獻者。

NumPy 操作

使用NumPy,,開發(fā)人員可以執(zhí)行以下操作:

  • 數(shù)組的算數(shù)和邏輯運算,。

  • 傅立葉變換和用于圖形操作的例程。

  • 與線性代數(shù)有關(guān)的操作,。NumPy 擁有線性代數(shù)和隨機數(shù)生成的內(nèi)置函數(shù)。

NumPy – MatLab 的替代之一

NumPy 通常與 SciPy(Scientific Python)和 Matplotlib(繪圖庫)一起使用,。這種組合廣泛用于替代 MatLab,,是一個流行的技術(shù)計算平臺,。但是,Python 作為 MatLab 的替代方案,,現(xiàn)在被視為一種更加現(xiàn)代和完整的編程語言,。

NumPy 是開源的,這是它的一個額外的優(yōu)勢,。

NumPy - 環(huán)境

在線嘗試

我們已經(jīng)在線設(shè)置了 NumPy 編程環(huán)境,,以便在線編譯和執(zhí)行所有可用的示例。它向你提供了信心,,并使您能夠使用不同的選項驗證程序,, 隨意修改任何示例并在線執(zhí)行。

使用我們的在線編譯器嘗試一下示例,,它位于 CodingGround

https://www./codingground.htm

import numpy as np  
a =  'hello world'  
print a

對于本教程中給出的大多數(shù)示例,,你會在我們的網(wǎng)站代碼部分的右上角找到一個Try it選項,這會把你帶到在線編譯器,。所以快來使用它,,享受你的學(xué)習(xí)吧。

標準的 Python 發(fā)行版不會與 NumPy 模塊捆綁在一起,。一個輕量級的替代方法是使用流行的 Python 包安裝程序 pip 來安裝 NumPy,。

pip install numpy

啟用 NumPy 的最佳方法是使用特定于您的操作系統(tǒng)的可安裝的二進制包。這些二進制包含完整的 SciPy 技術(shù)棧(包括 NumPy,,SciPy,,matplotlib,IPython,,SymPy 以及 Python 核心自帶的其它包),。

NumPy - Ndarray 對象

NumPy 中定義的最重要的對象是稱為 ndarray 的 N 維數(shù)組類型。它描述相同類型的元素集合,??梢允褂没诹愕乃饕L問集合中的項目。

ndarray中的每個元素在內(nèi)存中使用相同大小的塊,。 ndarray中的每個元素是數(shù)據(jù)類型對象的對象(稱為 dtype),。

ndarray對象提取的任何元素(通過切片)由一個數(shù)組標量類型的 Python 對象表示。下圖顯示了ndarray,,數(shù)據(jù)類型對象(dtype)和數(shù)組標量類型之間的關(guān)系,。

ndarray類的實例可以通過本教程后面描述的不同的數(shù)組創(chuàng)建例程來構(gòu)造?;镜?code>ndarray是使用 NumPy 中的數(shù)組函數(shù)創(chuàng)建的,,如下所示:

numpy.array

它從任何暴露數(shù)組接口的對象,或從返回數(shù)組的任何方法創(chuàng)建一個ndarray,。

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

上面的構(gòu)造器接受以下參數(shù):

序號參數(shù)及描述
1.object 任何暴露數(shù)組接口方法的對象都會返回一個數(shù)組或任何(嵌套)序列,。
2.dtype 數(shù)組的所需數(shù)據(jù)類型,,可選。
3.copy 可選,,默認為true,,對象是否被復(fù)制。
4.order C(按行),、F(按列)或A(任意,,默認)。
5.subok 默認情況下,,返回的數(shù)組被強制為基類數(shù)組,。如果為true,則返回子類,。
6.ndimin 指定返回數(shù)組的最小維數(shù),。

看看下面的例子來更好地理解。

示例 1

import numpy as np
a = np.array([1,2,3])  
print a

輸出如下:

[1, 2, 3]

示例 2

# 多于一個維度  
import numpy as np
a = np.array([[1,  2],  [3,  4]])  
print a

輸出如下:

[[1, 2]
[3, 4]]

示例 3

# 最小維度  
import numpy as np
a = np.array([1,  2,  3,4,5], ndmin =  2)  
print a

輸出如下:

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

示例 4

# dtype 參數(shù)  
import numpy as np
a = np.array([1,  2,  3], dtype = complex)  
print a

輸出如下:

[ 1.+0.j,  2.+0.j,  3.+0.j]

**ndarray ** 對象由計算機內(nèi)存中的一維連續(xù)區(qū)域組成,,帶有將每個元素映射到內(nèi)存塊中某個位置的索引方案,。內(nèi)存塊以按行(C 風(fēng)格)或按列(FORTRAN 或 MatLab 風(fēng)格)的方式保存元素。

NumPy - 數(shù)據(jù)類型

NumPy 支持比 Python 更多種類的數(shù)值類型,。下表顯示了 NumPy 中定義的不同標量數(shù)據(jù)類型,。

序號數(shù)據(jù)類型及描述
1.bool_ 存儲為一個字節(jié)的布爾值(真或假)
2.int_ 默認整數(shù),相當于 C 的long,,通常為int32int64
3.intc 相當于 C 的int,,通常為int32int64
4.intp 用于索引的整數(shù),相當于 C 的size_t,,通常為int32int64
5.int8 字節(jié)(-128 ~ 127)
6.int16 16 位整數(shù)(-32768 ~ 32767)
7.int32 32 位整數(shù)(-2147483648 ~ 2147483647)
8.int64 64 位整數(shù)(-9223372036854775808 ~ 9223372036854775807)
9.uint8 8 位無符號整數(shù)(0 ~ 255)
10.uint16 16 位無符號整數(shù)(0 ~ 65535)
11.uint32 32 位無符號整數(shù)(0 ~ 4294967295)
12.uint64 64 位無符號整數(shù)(0 ~ 18446744073709551615)
13.float_ float64的簡寫
14.float16 半精度浮點:符號位,,5 位指數(shù),10 位尾數(shù)
15.float32 單精度浮點:符號位,,8 位指數(shù),,23 位尾數(shù)
16.float64 雙精度浮點:符號位,11 位指數(shù),,52 位尾數(shù)
17.complex_ complex128的簡寫
18.complex64 復(fù)數(shù),,由兩個 32 位浮點表示(實部和虛部)
19.complex128 復(fù)數(shù),由兩個 64 位浮點表示(實部和虛部)

NumPy 數(shù)字類型是dtype(數(shù)據(jù)類型)對象的實例,,每個對象具有唯一的特征,。這些類型可以是np.bool_np.float32等,。

數(shù)據(jù)類型對象 (dtype)

數(shù)據(jù)類型對象描述了對應(yīng)于數(shù)組的固定內(nèi)存塊的解釋,,取決于以下方面:

  • 數(shù)據(jù)類型(整數(shù)、浮點或者 Python 對象)

  • 數(shù)據(jù)大小

  • 字節(jié)序(小端或大端)

  • 在結(jié)構(gòu)化類型的情況下,,字段的名稱,,每個字段的數(shù)據(jù)類型,,和每個字段占用的內(nèi)存塊部分。

  • 如果數(shù)據(jù)類型是子序列,,它的形狀和數(shù)據(jù)類型。

字節(jié)順序取決于數(shù)據(jù)類型的前綴<>,。 <意味著編碼是小端(最小有效字節(jié)存儲在最小地址中),。 >意味著編碼是大端(最大有效字節(jié)存儲在最小地址中)。

dtype可由一下語法構(gòu)造:

numpy.dtype(object, align, copy)

參數(shù)為:

  • Object:被轉(zhuǎn)換為數(shù)據(jù)類型的對象,。

  • Align:如果為true,,則向字段添加間隔,使其類似 C 的結(jié)構(gòu)體,。

  • Copy:生成dtype對象的新副本,,如果為flase,結(jié)果是內(nèi)建數(shù)據(jù)類型對象的引用,。

示例 1

# 使用數(shù)組標量類型  
import numpy as np
dt = np.dtype(np.int32)  
print dt

輸出如下:

int32

示例 2

#int8,,int16,int32,,int64 可替換為等價的字符串 'i1',,'i2','i4',,以及其他,。 
import numpy as np

dt = np.dtype('i4')  
print dt

輸出如下:

int32

示例 3

# 使用端記號  
import numpy as np
dt = np.dtype('>i4')  
print dt

輸出如下:

>i4

下面的例子展示了結(jié)構(gòu)化數(shù)據(jù)類型的使用。這里聲明了字段名稱和相應(yīng)的標量數(shù)據(jù)類型,。

示例 4

# 首先創(chuàng)建結(jié)構(gòu)化數(shù)據(jù)類型,。 
import numpy as np
dt = np.dtype([('age',np.int8)])  
print dt

輸出如下:

[('age', 'i1')]

示例 5

# 現(xiàn)在將其應(yīng)用于 ndarray 對象  
import numpy as np

dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)  
print a

輸出如下:

[(10,) (20,) (30,)]

示例 6

# 文件名稱可用于訪問 age 列的內(nèi)容  
import numpy as np

dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)  
print a['age']

輸出如下:

[10 20 30]

示例 7

以下示例定義名為 student 的結(jié)構(gòu)化數(shù)據(jù)類型,其中包含字符串字段name,,整數(shù)字段age浮點字段marks,。此dtype應(yīng)用于ndarray對象。

import numpy as np
student = np.dtype([('name','S20'),  ('age',  'i1'),  ('marks',  'f4')])  
print student

輸出如下:

[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')]

示例 8

import numpy as np

student = np.dtype([('name','S20'),  ('age',  'i1'),  ('marks',  'f4')])
a = np.array([('abc',  21,  50),('xyz',  18,  75)], dtype = student)  
print a

輸出如下:

[('abc', 21, 50.0), ('xyz', 18, 75.0)]

每個內(nèi)建類型都有一個唯一定義它的字符代碼:

  • 'b':布爾值

  • 'i':符號整數(shù)

  • 'u':無符號整數(shù)

  • 'f':浮點

  • 'c':復(fù)數(shù)浮點

  • 'm':時間間隔

  • 'M':日期時間

  • 'O':Python 對象

  • 'S', 'a':字節(jié)串

  • 'U':Unicode

  • 'V':原始數(shù)據(jù)(void

NumPy - 數(shù)組屬性

這一章中,,我們會討論 NumPy 的多種數(shù)組屬性,。

ndarray.shape

這一數(shù)組屬性返回一個包含數(shù)組維度的元組,它也可以用于調(diào)整數(shù)組大小,。

示例 1

import numpy as np
a = np.array([[1,2,3],[4,5,6]])  
print a.shape

輸出如下:

(2, 3)

示例 2

NumPy 也提供了reshape函數(shù)來調(diào)整數(shù)組大小,。

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)  
print b

輸出如下:

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

NumPy - 切片和索引

ndarray對象的內(nèi)容可以通過索引或切片來訪問和修改,就像 Python 的內(nèi)置容器對象一樣,。

如前所述,,ndarray對象中的元素遵循基于零的索引。有三種可用的索引方法類型:字段訪問,,基本切片高級索引,。

基本切片是 Python 中基本切片概念到 n 維的擴展,。通過將startstopstep參數(shù)提供給內(nèi)置的slice函數(shù)來構(gòu)造一個 Python slice對象,。此slice對象被傳遞給數(shù)組來提取數(shù)組的一部分,。

示例 1

import numpy as np
a = np.arange(10)
s = slice(2,7,2)  
print a[s]

輸出如下:

[2  4  6]

在上面的例子中,ndarray對象由arange()函數(shù)創(chuàng)建,。然后,,分別用起始,終止和步長值2,,72定義切片對象,。當這個切片對象傳遞給ndarray時,會對它的一部分進行切片,,從索引27,,步長為2

通過將由冒號分隔的切片參數(shù)(start:stop:step)直接提供給ndarray對象,,也可以獲得相同的結(jié)果,。

示例 2

import numpy as np
a = np.arange(10)
b = a[2:7:2]  
print b

輸出如下:

[2  4  6]

如果只輸入一個參數(shù),則將返回與索引對應(yīng)的單個項目,。如果使用a:,,則從該索引向后的所有項目將被提取。如果使用兩個參數(shù)(以:分隔),,則對兩個索引(不包括停止索引)之間的元素以默認步驟進行切片,。

NumPy - 高級索引

如果一個ndarray是非元組序列,數(shù)據(jù)類型為整數(shù)或布爾值的ndarray,,或者至少一個元素為序列對象的元組,,我們就能夠用它來索引ndarray。高級索引始終返回數(shù)據(jù)的副本,。與此相反,,切片只提供了一個視圖。

有兩種類型的高級索引:整數(shù)和布爾值,。

整數(shù)索引

這種機制有助于基于 N 維索引來獲取數(shù)組中任意元素,。每個整數(shù)數(shù)組表示該維度的下標值。當索引的元素個數(shù)就是目標ndarray的維度時,,會變得相當直接,。

以下示例獲取了ndarray對象中每一行指定列的一個元素。因此,,行索引包含所有行號,,列索引指定要選擇的元素。

示例

import numpy as np
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print  '我們的數(shù)組是:'  
print x
print  '\n'  
# 切片
z = x[1:4,1:3]  
print  '切片之后,我們的數(shù)組變?yōu)椋?  
print z
print  '\n'  
# 對列使用高級索引
y = x[1:4,[1,2]]
print  '對列使用高級索引來切片:'  
print y

輸出如下:

我們的數(shù)組是:
[[ 0  1  2]
[ 3  4  5]
[ 6  7  8]
[ 9 10 11]]
切片之后,,我們的數(shù)組變?yōu)椋?br>[[ 4  5]
[ 7  8]
[10 11]]
對列使用高級索引來切片:
[[ 4  5]
[ 7  8]
[10 11]]

布爾索引

當結(jié)果對象是布爾運算(例如比較運算符)的結(jié)果時,,將使用此類型的高級索引。

示例

這個例子中,,大于 5 的元素會作為布爾索引的結(jié)果返回,。

import numpy as np
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print  '我們的數(shù)組是:'  
print x
print  '\n'  
# 現(xiàn)在我們會打印出大于 5 的元素  
print  '大于 5 的元素是:'  
print x[x >  5]

輸出如下:

我們的數(shù)組是:
[[ 0  1  2]
[ 3  4  5]
[ 6  7  8]
[ 9 10 11]]
大于 5 的元素是:
[ 6  7  8  9 10 11]

NumPy - 廣播

術(shù)語廣播是指 NumPy 在算術(shù)運算期間處理不同形狀的數(shù)組的能力。對數(shù)組的算術(shù)運算通常在相應(yīng)的元素上進行,。如果兩個陣列具有完全相同的形狀,,則這些操作被無縫執(zhí)行。

示例

import numpy as np

a = np.array([1,2,3,4])
b = np.array([10,20,30,40])
c = a * b
print c

輸出如下:

[10   40   90   160]

如果兩個數(shù)組的維數(shù)不相同,,則元素到元素的操作是不可能的。然而,,在 NumPy 中仍然可以對形狀不相似的數(shù)組進行操作,,因為它擁有廣播功能。較小的數(shù)組會廣播到較大數(shù)組的大小,,以便使它們的形狀可兼容,。

如果滿足以下規(guī)則,可以進行廣播:

  • ndim較小的數(shù)組會在前面追加一個長度為 1 的維度,。

  • 輸出數(shù)組的每個維度的大小是輸入數(shù)組該維度大小的最大值,。

  • 如果輸入在每個維度中的大小與輸出大小匹配,或其值正好為 1,,則在計算中可它,。

  • 如果輸入的某個維度大小為 1,則該維度中的第一個數(shù)據(jù)元素將用于該維度的所有計算,。

如果上述規(guī)則產(chǎn)生有效結(jié)果,,并且滿足以下條件之一,那么數(shù)組被稱為可廣播的,。

  • 數(shù)組擁有相同形狀,。

  • 數(shù)組擁有相同的維數(shù),每個維度擁有相同長度,,或者長度為 1,。

  • 數(shù)組擁有極少的維度,可以在其前面追加長度為 1 的維度,,使上述條件成立,。

NumPy - 數(shù)組上的迭代

NumPy 包包含一個迭代器對象numpy.nditer。它是一個有效的多維迭代器對象,,可以用于在數(shù)組上進行迭代,。數(shù)組的每個元素可使用 Python 的標準Iterator接口來訪問。

讓我們使用arange()函數(shù)創(chuàng)建一個 3X4 數(shù)組,并使用nditer對它進行迭代,。

示例

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)  
print  '原始數(shù)組是:'  
print a print  '\n'  
print  '修改后的數(shù)組是:'  
for x in np.nditer(a):  
   print x,

輸出如下:

原始數(shù)組是:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]]
修改后的數(shù)組是:
0 5 10 15 20 25 30 35 40 45 50 55

NumPy - 數(shù)組操作

NumPy包中有幾個例程用于處理ndarray對象中的元素,。它們可以分為以下類型:

修改形狀

序號形狀及描述
1.reshape 不改變數(shù)據(jù)的條件下修改形狀
2.flat 數(shù)組上的一維迭代器
3.flatten 返回折疊為一維的數(shù)組副本
4.ravel 返回連續(xù)的展開數(shù)組

numpy.reshape

這個函數(shù)在不改變數(shù)據(jù)的條件下修改形狀,它接受如下參數(shù):

numpy.reshape(arr, newshape, order)

其中:

  • arr:要修改形狀的數(shù)組

  • newshape:整數(shù)或者整數(shù)數(shù)組,,新的形狀應(yīng)當兼容原有形狀

  • order'C'為 C 風(fēng)格順序,,'F'為 F 風(fēng)格順序,'A'為保留原順序,。

例子

import numpy as np
a = np.arange(8)
print '原始數(shù)組:'
print a
print '\n'
b = a.reshape(4,2)
print '修改后的數(shù)組:'
print b

輸出如下:

原始數(shù)組:
[0 1 2 3 4 5 6 7]

修改后的數(shù)組:
[[0 1]
[2 3]
[4 5]
[6 7]]

numpy.ndarray.flat

該函數(shù)返回數(shù)組上的一維迭代器,,行為類似 Python 內(nèi)建的迭代器。

例子

import numpy as np
a = np.arange(8).reshape(2,4)
print '原始數(shù)組:'
print a
print '\n'
print '調(diào)用 flat 函數(shù)之后:'
# 返回展開數(shù)組中的下標的對應(yīng)元素
print a.flat[5]

輸出如下:

原始數(shù)組:
[[0 1 2 3]
[4 5 6 7]]
調(diào)用 flat 函數(shù)之后:
5

numpy.ndarray.flatten

該函數(shù)返回折疊為一維的數(shù)組副本,,函數(shù)接受下列參數(shù):

ndarray.flatten(order)

其中:

  • order'C' -- 按行,,'F' -- 按列,'A' -- 原順序,,'k' -- 元素在內(nèi)存中的出現(xiàn)順序,。

例子

import numpy as np
a = np.arange(8).reshape(2,4)

print '原數(shù)組:'
print a
print '\n'  
# default is column-major
print '展開的數(shù)組:'
print a.flatten()
print '\n'  
print '以 F 風(fēng)格順序展開的數(shù)組:'
print a.flatten(order = 'F')

輸出如下:

原數(shù)組:
[[0 1 2 3]
[4 5 6 7]]
展開的數(shù)組:
[0 1 2 3 4 5 6 7]
以 F 風(fēng)格順序展開的數(shù)組:
[0 4 1 5 2 6 3 7]

numpy.ravel

這個函數(shù)返回展開的一維數(shù)組,并且按需生成副本,。返回的數(shù)組和輸入數(shù)組擁有相同數(shù)據(jù)類型,。這個函數(shù)接受兩個參數(shù)。

numpy.ravel(a, order)

構(gòu)造器接受下列參數(shù):

  • order'C' -- 按行,,'F' -- 按列,,'A' -- 原順序,'k' -- 元素在內(nèi)存中的出現(xiàn)順序,。

例子

import numpy as np
a = np.arange(8).reshape(2,4)

print '原數(shù)組:'
print a
print '\n'  
print '調(diào)用 ravel 函數(shù)之后:'
print a.ravel()  
print '\n'
print '以 F 風(fēng)格順序調(diào)用 ravel 函數(shù)之后:'
print a.ravel(order = 'F')

輸出如下:

原數(shù)組:
[[0 1 2 3]
[4 5 6 7]]

調(diào)用 ravel 函數(shù)之后:
[0 1 2 3 4 5 6 7]

以 F 風(fēng)格順序調(diào)用 ravel 函數(shù)之后:
[0 4 1 5 2 6 3 7]

翻轉(zhuǎn)操作

序號操作及描述
1.transpose 翻轉(zhuǎn)數(shù)組的維度
2.ndarray.T 和self.transpose()相同
3.rollaxis 向后滾動指定的軸
4.swapaxes 互換數(shù)組的兩個軸

修改維度

序號維度和描述
1.broadcast 產(chǎn)生模仿廣播的對象
2.broadcast_to 將數(shù)組廣播到新形狀
3.expand_dims 擴展數(shù)組的形狀
4.squeeze 從數(shù)組的形狀中刪除單維條目

數(shù)組的連接

序號數(shù)組及描述
1.concatenate 沿著現(xiàn)存的軸連接數(shù)據(jù)序列
2.stack 沿著新軸連接數(shù)組序列
3.hstack 水平堆疊序列中的數(shù)組(列方向)
4.vstack 豎直堆疊序列中的數(shù)組(行方向)

數(shù)組分割

序號數(shù)組及操作
1.split 將一個數(shù)組分割為多個子數(shù)組
2.hsplit 將一個數(shù)組水平分割為多個子數(shù)組(按列)
3.vsplit 將一個數(shù)組豎直分割為多個子數(shù)組(按行)

添加/刪除元素

序號元素及描述
1.resize 返回指定形狀的新數(shù)組
2.append 將值添加到數(shù)組末尾
3.insert 沿指定軸將值插入到指定下標之前
4.delete 返回刪掉某個軸的子數(shù)組的新數(shù)組
5.unique 尋找數(shù)組內(nèi)的唯一元素

NumPy - 位操作

下面是 NumPy 包中可用的位操作函數(shù),。

序號操作及描述
1.bitwise_and 對數(shù)組元素執(zhí)行位與操作
2.bitwise_or 對數(shù)組元素執(zhí)行位或操作
3.invert 計算位非
4.left_shift 向左移動二進制表示的位
5.right_shift 向右移動二進制表示的位

示例

import numpy as np
print '13 和 17 的二進制形式:'
a,b = 13,17
print bin(a), bin(b)
print '\n'
print '13 和 17 的位與:'
print np.bitwise_and(13, 17)

輸出如下:

1317 的二進制形式:
0b1101 0b10001

1317 的位與:
1

你可以使用下表驗證此輸出??紤]下面的位與真值表,。

ABAND
111
100
010
000

|  |  | 1 | 1 | 0 | 1 |
| --- | --- |
| AND |
| | 1 | 0 | 0 | 0 | 1 |
| result | 0 | 0 | 0 | 0 | 1 |

NumPy - 字符串函數(shù)

以下函數(shù)用于對dtypenumpy.string_numpy.unicode_的數(shù)組執(zhí)行向量化字符串操作。它們基于 Python 內(nèi)置庫中的標準字符串函數(shù),。

序號函數(shù)及描述
1.add() 返回兩個strUnicode數(shù)組的逐個字符串連接
2.multiply() 返回按元素多重連接后的字符串
3.center() 返回給定字符串的副本,,其中元素位于特定字符串的中央
4.capitalize() 返回給定字符串的副本,其中只有第一個字符串大寫
5.title() 返回字符串或 Unicode 的按元素標題轉(zhuǎn)換版本
6.lower() 返回一個數(shù)組,,其元素轉(zhuǎn)換為小寫
7.upper() 返回一個數(shù)組,,其元素轉(zhuǎn)換為大寫
8.split() 返回字符串中的單詞列表,并使用分隔符來分割
9.splitlines() 返回元素中的行列表,,以換行符分割
10.strip() 返回數(shù)組副本,,其中元素移除了開頭或者結(jié)尾處的特定字符
11.join() 返回一個字符串,它是序列中字符串的連接
12.replace() 返回字符串的副本,,其中所有子字符串的出現(xiàn)位置都被新字符串取代
13.decode() 按元素調(diào)用str.decode
14.encode() 按元素調(diào)用str.encode

這些函數(shù)在字符數(shù)組類(numpy.char)中定義,。較舊的 Numarray 包包含chararray類,。numpy.char類中的上述函數(shù)在執(zhí)行向量化字符串操作時非常有用。

示例

import numpy as np
print '連接兩個字符串:'
print np.char.add(['hello'],[' xyz'])
print '\n'
print '連接示例:'
print np.char.add(['hello', 'hi'],[' abc', ' xyz'])

輸出如下:

連接兩個字符串:
['hello xyz']

連接示例:
['hello abc' 'hi xyz']

NumPy - 算數(shù)函數(shù)

很容易理解的是,,NumPy 包含大量的各種數(shù)學(xué)運算功能,。NumPy 提供標準的三角函數(shù),算術(shù)運算的函數(shù),,復(fù)數(shù)處理函數(shù)等,。

三角函數(shù)

NumPy 擁有標準的三角函數(shù),它為弧度制單位的給定角度返回三角函數(shù)比值,。

舍入函數(shù)

numpy.around()

這個函數(shù)返回四舍五入到所需精度的值,。該函數(shù)接受以下參數(shù)。

numpy.around(a,decimals)

其中:

序號參數(shù)及描述
1.a 輸入數(shù)組
2.decimals 要舍入的小數(shù)位數(shù),。默認值為0,。如果為負,整數(shù)將四舍五入到小數(shù)點左側(cè)的位置

NumPy - 算數(shù)運算

用于執(zhí)行算術(shù)運算(如add(),,subtract(),,multiply()divide())的輸入數(shù)組必須具有相同的形狀或符合數(shù)組廣播規(guī)則。

示例 

import numpy as np
a = np.arange(9, dtype = np.float_).reshape(3,3)  
print  '第一個數(shù)組:'  
print a
print  '\n'  
print  '第二個數(shù)組:'
b = np.array([10,10,10])  
print b
print  '\n'  
print  '兩個數(shù)組相加:'  
print np.add(a,b)  
print  '\n'  
print  '兩個數(shù)組相減:'  
print np.subtract(a,b)  
print  '\n'  
print  '兩個數(shù)組相乘:'  
print np.multiply(a,b)  
print  '\n'  
print  '兩個數(shù)組相除:'  
print np.divide(a,b)

輸出如下:

第一個數(shù)組:
[[ 0. 1. 2.]
[ 3. 4. 5.]
[ 6. 7. 8.]]

第二個數(shù)組:
[10 10 10]

兩個數(shù)組相加:
[[ 10. 11. 12.]
[ 13. 14. 15.]
[ 16. 17. 18.]]

兩個數(shù)組相減:
[[-10. -9. -8.]
[ -7. -6. -5.]
[ -4. -3. -2.]]

兩個數(shù)組相乘:
[[ 0. 10. 20.]
[ 30. 40. 50.]
[ 60. 70. 80.]]

兩個數(shù)組相除:
[[ 0. 0.1 0.2]
[ 0.3 0.4 0.5]
[ 0.6 0.7 0.8]]

NumPy - 統(tǒng)計函數(shù)

NumPy 有很多有用的統(tǒng)計函數(shù),,用于從數(shù)組中給定的元素中查找最小,最大,,百分標準差和方差等,。函數(shù)說明如下:

numpy.amin() 和 numpy.amax()

這些函數(shù)從給定數(shù)組中的元素沿指定軸返回最小值和最大值。

numpy.ptp()

numpy.ptp()函數(shù)返回沿軸的值的范圍(最大值 - 最小值),。

numpy.percentile()

百分位數(shù)是統(tǒng)計中使用的度量,,表示小于這個值得觀察值占某個百分比。函數(shù)numpy.percentile()接受以下參數(shù),。

numpy.percentile(a, q, axis)

其中:

序號參數(shù)及描述
1.a 輸入數(shù)組
2.q 要計算的百分位數(shù),,在 0 ~ 100 之間
3.axis 沿著它計算百分位數(shù)的軸

numpy.median()

中值定義為將數(shù)據(jù)樣本的上半部分與下半部分分開的值。 numpy.median()函數(shù)的用法如下面的程序所示,。

numpy.mean()

算術(shù)平均值是沿軸的元素的總和除以元素的數(shù)量,。 numpy.mean()函數(shù)返回數(shù)組中元素的算術(shù)平均值。如果提供了軸,,則沿其計算,。

numpy.average()

加權(quán)平均值是由每個分量乘以反映其重要性的因子得到的平均值。 numpy.average()函數(shù)根據(jù)在另一個數(shù)組中給出的各自的權(quán)重計算數(shù)組中元素的加權(quán)平均值,。該函數(shù)可以接受一個軸參數(shù),。如果沒有指定軸,則數(shù)組會被展開,。

考慮數(shù)組[1,2,3,4]和相應(yīng)的權(quán)重[4,3,2,1],,通過將相應(yīng)元素的乘積相加,并將和除以權(quán)重的和,來計算加權(quán)平均值,。

加權(quán)平均值 = (1*4+2*3+3*2+4*1)/(4+3+2+1)

標準差

標準差是與均值的偏差的平方的平均值的平方根,。標準差公式如下:

std = sqrt(mean((x - x.mean())**2))

如果數(shù)組是[1,2,,3,,4],則其平均值為2.5,。因此,,差的平方是[2.25,0.25,0.25,2.25],并且其平均值的平方根除以4,,即sqrt(5/4)1.1180339887498949,。

方差

方差是偏差的平方的平均值,即mean((x - x.mean())** 2),。換句話說,,標準差是方差的平方根。

NumPy - 排序,、搜索和計數(shù)函數(shù)

NumPy中提供了各種排序相關(guān)功能,。這些排序函數(shù)實現(xiàn)不同的排序算法,每個排序算法的特征在于執(zhí)行速度,,最壞情況性能,,所需的工作空間和算法的穩(wěn)定性。下表顯示了三種排序算法的比較,。

種類速度最壞情況工作空間穩(wěn)定性
'quicksort'(快速排序)1O(n^2)0
'mergesort'(歸并排序)2O(n*log(n))~n/2
'heapsort'(堆排序)3O(n*log(n))0

示例 

import numpy as np  
a = np.array([[3,7],[9,1]])  
print  '我們的數(shù)組是:'  
print a
print  '\n'  
print  '調(diào)用 sort() 函數(shù):'  
print np.sort(a)  
print  '\n'  
print  '沿軸 0 排序:'  
print np.sort(a, axis =  0)  
print  '\n'  
# 在 sort 函數(shù)中排序字段
dt = np.dtype([('name',  'S10'),('age',  int)])
a = np.array([('raju',21),('anil',25),('ravi',  17),  ('amar',27)], dtype = dt)  
print  '我們的數(shù)組是:'  
print a
print  '\n'  
print  '按 name 排序:'  
print np.sort(a, order =  'name')

輸出如下:

我們的數(shù)組是:
[[3 7]
[9 1]]
調(diào)用 sort() 函數(shù):
[[3 7]
[1 9]]
沿軸 0 排序:
[[3 1]
[9 7]]
我們的數(shù)組是:
[('raju', 21) ('anil', 25) ('ravi', 17) ('amar', 27)]
按 name 排序:
[('amar', 27) ('anil', 25) ('raju', 21) ('ravi', 17)]

NumPy - 線性代數(shù)

NumPy 包包含numpy.linalg模塊,,提供線性代數(shù)所需的所有功能。此模塊中的一些重要功能如下表所述,。

序號函數(shù)及描述
1.dot 兩個數(shù)組的點積
2.vdot 兩個向量的點積
3.inner 兩個數(shù)組的內(nèi)積
4.matmul 兩個數(shù)組的矩陣積
5.determinant 數(shù)組的行列式
6.solve 求解線性矩陣方程
7.inv 尋找矩陣的乘法逆矩陣

示例 

import numpy.matlib
import numpy as np

a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
np.dot(a,b)

輸出如下:

[[37  40]
[85  92]]

NumPy - Matplotlib

Matplotlib 是 Python 的繪圖庫,。它可與 NumPy 一起使用,提供了一種有效的 MatLab 開源替代方案,。它也可以和圖形工具包一起使用,,如 PyQt 和 wxPython。

Matplotlib 模塊最初是由 John D. Hunter 編寫的,。自 2012 年以來,,Michael Droettboom 是主要開發(fā)者。目前,,Matplotlib 1.5.1 是可用的穩(wěn)定版本,。該軟件包可以二進制分發(fā),其源代碼形式在 www.matplotlib.org 上提供,。

通常,,通過添加以下語句將包導(dǎo)入到 Python 腳本中:

from matplotlib import pyplot as plt

這里pyplot()是 matplotlib 庫中最重要的函數(shù),,用于繪制 2D 數(shù)據(jù)。以下腳本繪制方程y = 2x + 5

示例 

import numpy as np
from matplotlib import pyplot as plt

x = np.arange(1,11)
y =  2  * x +  5
plt.title('Matplotlib demo')
plt.xlabel('x axis caption')
plt.ylabel('y axis caption')
plt.plot(x,y)
plt.show()

ndarray對象xnp.arange()函數(shù)創(chuàng)建為x軸上的值,。y軸上的對應(yīng)值存儲在另一個數(shù)組對象y中,。這些值使用matplotlib軟件包的pyplot子模塊的plot()函數(shù)繪制。

圖形由show()函數(shù)展示,。

上面的代碼應(yīng)該產(chǎn)生以下輸出:

作為線性圖的替代,,可以通過向plot()函數(shù)添加格式字符串來顯示離散值??梢允褂靡韵赂袷交址?。

字符描述
'-'實線樣式
'--'短橫線樣式
'-.'點劃線樣式
':'虛線樣式
'.'點標記
','像素標記
'o'圓標記
'v'倒三角標記
'^'正三角標記
'<'左三角標記
'>'右三角標記
'1'下箭頭標記
'2'上箭頭標記
'3'左箭頭標記
'4'右箭頭標記
's'正方形標記
'p'五邊形標記
'*'星形標記
'h'六邊形標記 1
'H'六邊形標記 2
'+'加號標記
'x'X 標記
'D'菱形標記
'd'窄菱形標記
`''`豎直線標記
'_'水平線標記

還定義了以下顏色縮寫。

字符顏色
'b'藍色
'g'綠色
'r'紅色
'c'青色
'm'品紅色
'y'黃色
'k'黑色
'w'白色

要顯示圓來代表點,,而不是上面示例中的線,,請使用ob作為plot()函數(shù)中的格式字符串。

示例 

import numpy as np
from matplotlib import pyplot as plt

x = np.arange(1,11)
y =  2  * x +  5
plt.title('Matplotlib demo')
plt.xlabel('x axis caption')
plt.ylabel('y axis caption')
plt.plot(x,y,'ob')
plt.show()

上面的代碼應(yīng)該產(chǎn)生以下輸出:

繪制正弦波

以下腳本使用 matplotlib 生成正弦波圖,。

示例 

import numpy as np
import matplotlib.pyplot as plt
# 計算正弦曲線上點的 x 和 y 坐標
x = np.arange(0,  3  * np.pi,  0.1)
y = np.sin(x)
plt.title('sine wave form')  
# 使用 matplotlib 來繪制點
plt.plot(x, y)
plt.show()

subplot()

subplot()函數(shù)允許你在同一圖中繪制不同的東西,。在下面的腳本中,繪制正弦余弦值,。

示例 

import numpy as np
import matplotlib.pyplot as plt
# 計算正弦和余弦曲線上的點的 x 和 y 坐標
x = np.arange(0,  3  * np.pi,  0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)  
# 建立 subplot 網(wǎng)格,,高為 2,寬為 1  
# 激活第一個 subplot
plt.subplot(2,  1,  1)  
# 繪制第一個圖像
plt.plot(x, y_sin)
plt.title('Sine')  
# 將第二個 subplot 激活,,并繪制第二個圖像
plt.subplot(2,  1,  2)
plt.plot(x, y_cos)
plt.title('Cosine')  
# 展示圖像
plt.show()

上面的代碼應(yīng)該產(chǎn)生以下輸出:

bar()

pyplot子模塊提供bar()函數(shù)來生成條形圖,。以下示例生成兩組xy數(shù)組的條形圖。

示例 

from matplotlib import pyplot as plt
x =  [5,8,10]
y =  [12,16,6]
x2 =  [6,9,11]
y2 =  [6,15,7]
plt.bar(x, y, align =  'center')
plt.bar(x2, y2, color =  'g', align =  'center')
plt.title('Bar graph')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()

NumPy - 使用 Matplotlib 繪制直方圖

NumPy 有一個numpy.histogram()函數(shù),,它是數(shù)據(jù)的頻率分布的圖形表示,。水平尺寸相等的矩形對應(yīng)于類間隔,,稱為bin,,變量height對應(yīng)于頻率。

numpy.histogram()

numpy.histogram()函數(shù)將輸入數(shù)組和bin作為兩個參數(shù),。 bin數(shù)組中的連續(xù)元素用作每個bin的邊界,。

import numpy as np

a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27]) ]
np.histogram(a,bins =  [0,20,40,60,80,100])
hist,bins = np.histogram(a,bins =  [0,20,40,60,80,100])  
print hist
print bins

輸出如下:

[3 4 5 2 1]
[0 20 40 60 80 100]

plt()

Matplotlib 可以將直方圖的數(shù)字表示轉(zhuǎn)換為圖形。 pyplot子模塊的plt()函數(shù)將包含數(shù)據(jù)和bin數(shù)組的數(shù)組作為參數(shù),,并轉(zhuǎn)換為直方圖,。

from matplotlib import pyplot as plt
import numpy as np  

a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
plt.hist(a, bins =  [0,20,40,60,80,100])
plt.title('histogram')
plt.show()

輸出如下:

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多