成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python_numPy學習

lauren_liuling / 1010人閱讀

摘要:而由一個與此數(shù)組相關系的數(shù)據(jù)類型對象來描述其數(shù)組元素的數(shù)據(jù)格式例如其字符組順序在存儲器中占用的字符組數(shù)量整數(shù)或者浮點數(shù)等等。一個行列的矩陣的是數(shù)組中所有元素的數(shù)量數(shù)組中元素的類型,例如或者數(shù)組中每個元素的大小,單位為字節(jié)存儲數(shù)組元素的緩沖。

原文鏈接

numPy

維基百科

特點

NumPy引用CPython(一個使用字節(jié)碼的解釋器),而在這個Python實現(xiàn)解釋器上所寫的數(shù)學算法代碼通常遠比編譯過的相同代碼要來得慢。為了解決這個難題,NumPy引入了多維數(shù)組以及可以直接有效率地操作多維數(shù)組的函數(shù)與運算符。因此在NumPy上只要能被表示為針對數(shù)組或矩陣運算的算法,其運行效率幾乎都可以與編譯過的等效C語言代碼一樣快。[1]

NumPy提供了與MATLAB相似的功能與操作方式,因為兩者皆為解釋型語言,并且都可以讓用戶在針對數(shù)組或矩陣運算時提供較標量運算更快的性能。兩者相較之下,MATLAB提供了大量的擴充工具箱(例如Simulink);而NumPy則是根基于Python這個更現(xiàn)代、完整并且開放源代碼的編程語言之上。此外NumPy也可以結合其它的Python擴充庫。例如SciPy,這個庫提供了更多與MATLAB相似的功能;以及Matplotlib,這是一個與MATLAB內(nèi)置繪圖功能類似的庫。而從本質上來說,NumPy與MATLAB同樣是利用BLAS與LAPACK來提供高效率的線性代數(shù)運算

ndarray 數(shù)據(jù)結構

NumPy的核心功能是"ndarray"(即n-dimensional array,多維數(shù)組)數(shù)據(jù)結構。這是一個表示多維度、同質并且固定大小的數(shù)組對象。而由一個與此數(shù)組相關系的數(shù)據(jù)類型對象來描述其數(shù)組元素的數(shù)據(jù)格式(例如其字符組順序、在存儲器中占用的字符組數(shù)量、整數(shù)或者浮點數(shù)等等)。

數(shù)組創(chuàng)建

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

首先獲取NumPy,具體方式請打開鏈接

默認書寫方式

import numpy as np

創(chuàng)建data1、data2兩個普通數(shù)組,data1的rank為1,axis的長度為6。data2的rank為2,axis的長度為4。

>>> data1 = [6,7.5,8,0,1]
>>> data2 = [[1,2,3,4],[5,6,7,8]]
>>> data1
[6, 7.5, 8, 0, 1]
>>> data2
[[1, 2, 3, 4], [5, 6, 7, 8]]

通過array函數(shù)來創(chuàng)建NumPy的數(shù)組

>>> arr1 = np.array(data1)
>>> arr2 = np.array(data2)
>>> arr1
array([6. , 7.5, 8. , 0. , 1. ])
>>> arr2
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

NumPy的數(shù)組類是ndarray,它有一個別名是 numpy.array,但這與Python標準庫的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ù)組元素的緩沖。通常我們只需要通過下標來訪問元素,而不需要訪問緩沖

ndarray屬性實例

>>> arr1.ndim
1
>>> arr2.ndim
2
>>> arr1.shape
(5,)
>>> arr2.shape
(2, 4)
>>> arr1.size
5
>>> arr2.size
8
>>> arr1.dtype
dtype("float64")
>>> arr2.dtype
dtype("int64")
>>> arr1.itemsize
8
>>> arr2.itemsize
8
創(chuàng)建指定的數(shù)組

指定rank為2:

>>> np.array([1, 2, 3], ndmin=2)
array([[1, 2, 3]])

指定為complex類型的數(shù)據(jù):

>>> np.array([1, 2, 3], dtype=complex)
array([1.+0.j, 2.+0.j, 3.+0.j])

生成數(shù)組并賦為特殊值:

ones:全1

zeros:全0

empty:隨機數(shù),取決于內(nèi)存情況

>>> np.zeros( (3,4) )
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> np.ones( (2,3,4), dtype=np.int16 )
array([[[ 1, 1, 1, 1],
        [ 1, 1, 1, 1],
        [ 1, 1, 1, 1]],
       [[ 1, 1, 1, 1],
        [ 1, 1, 1, 1],
        [ 1, 1, 1, 1]]], dtype=int16)
>>> np.empty( (2,3) )
array([[  3.73603959e-262,   6.02658058e-154,   6.55490914e-260],
       [  5.30498948e-313,   3.14673309e-307,   1.00000000e+000]])

生成均勻分布的array:

arange(最小值,最大值,步長)(左閉右開)

linspace(最小值,最大值,元素數(shù)量)

>>> np.arange( 10, 30, 5 )
array([10, 15, 20, 25])

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

生成隨機數(shù)random:

>>> np.random.random((2,3))
array([[0.41604856, 0.7216842 , 0.88832856],
       [0.42092882, 0.44241471, 0.07187805]])
Shape與操作

根據(jù)已有數(shù)組進行相關的操作來產(chǎn)生一些新的數(shù)據(jù)結構

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

>>> b = np.array([1,2,3,4,5,6,7,8,9])
>>> b.reshape((3,3))
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

注意:形狀變化的原則是數(shù)組元素不能發(fā)生改變,比如這樣寫就是錯誤的,因為數(shù)組元素發(fā)生了變化。

>>> b.reshape((4,3))
Traceback (most recent call last):
  File "", line 1, in 
ValueError: cannot reshape array of size 10 into shape (4,3)

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

>>> a1 = [1,2,3]
>>> a2 = [4,5,6]
>>> a3 = [7,8,9]
>>> np.vstack((a1,a2,a3))
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

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

np.hstack((a1,a2,a3))
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

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

>>> b1 = np.vstack((a1,a2,a3))
>>> np.hsplit(b1,3)
[array([[1],
       [4],
       [7]]), array([[2],
       [5],
       [8]]), array([[3],
       [6],
       [9]])]

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

>>> np.vsplit(b1,3)
[array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
相關運算

基本運算

>>> a = np.array( [20,30,40,50] )
>>> b = np.arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> a > 35
array([False, False,  True,  True])

數(shù)組相乘,對應位置相乘

>>> ab1 = np.array([[1,2],[3,4]])
>>> ab2 = np.array([[5,6],[7,8]])
>>> ab1 * ab2
array([[ 5, 12],
       [21, 32]])

矩陣乘法,使用dot

>>> ab1.dot(ab2)
array([[19, 22],
       [43, 50]])

內(nèi)置函數(shù)(min,max,sum),同時可以使用axis指定對哪一維進行操作

>>> b = np.arange(12).reshape(3,4)
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>
>>> b.sum(axis=0)
array([12, 15, 18, 21])
>>>
>>> b.min(axis=1)
array([0, 4, 8])
>>>
>>> b.cumsum(axis=1)
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38]])
書中案例

1000個硬幣累計結果和

參考資料

1、SciPy.org
2、利用python進行數(shù)據(jù)分析 密碼: s8wx

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/41529.html

相關文章

  • ApacheCN 人工智能知識樹 v1.0

    摘要:貢獻者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長時間,如果你一本書一本書看的話,的確要用很長時間。為了方便大家,我就把每本書的章節(jié)拆開,再按照知識點合并,手動整理了這個知識樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻者:飛龍版...

    劉厚水 評論0 收藏0
  • 深度學習不是AI的未來

    摘要:不過,深度學習并不是人類可以創(chuàng)造的完美人工智能科技的終點。深度學習的公正性并非來自其自身,而是人類篩選和準備的深度學習數(shù)據(jù)。深度學習給出的是非自然合法語言解釋的結果。 現(xiàn)在每一個人都正在學習,或者正打算學習深度學習,它是目前人工智能諸多流派中興起的一個。各個年齡階段的數(shù)十萬人都在學習著免費和收費的深度學習課程。太多的創(chuàng)業(yè)公司和產(chǎn)品的命名以深度開頭,深度學習已然成了一個流行語,但其真正的落地應...

    用戶83 評論0 收藏0
  • 深度學習:遠非人工智能的全部和未來

    摘要:絕大多數(shù)人忽略了深度學習只占機器學習領域的,而機器學習又只占到了人工智能領域的。一個深度學習專家無法與人工智能專家劃上等號。但是,深度學習并不是人類可以創(chuàng)造的人工智能科技的終點。深度學習的公正性并非來自其自身,而是人類篩選和準備的數(shù)據(jù)。 人工智能的這一波熱潮毫無疑問是由深度學習引發(fā)的,自吳恩達等人 2011 年發(fā)表「識別貓」研究后,深度學習及其引發(fā)的技術已經(jīng)在圖像識別、游戲等任務中超越人類,...

    hedzr 評論0 收藏0
  • 普通程序員,如何轉行人工智能?

    摘要:普通程序員,如何轉向人工智能方向,是知乎上的一個問題。領域簡介,也就是人工智能,并不僅僅包括機器學習。但是,人工智能并不等同于機器學習,這點在進入這個領域時一定要認識清楚。 人工智能已經(jīng)成為越來越火的一個方向。普通程序員,如何轉向人工智能方向,是知乎上的一個問題。本文是對此問題的一個回答的歸檔版。相比原回答有所內(nèi)容增加。 目的 本文的目的是給出一個簡單的,平滑的,易于實現(xiàn)的學習方法,幫...

    mingde 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<