摘要:而由一個與此數組相關系的數據類型對象來描述其數組元素的數據格式例如其字符組順序在存儲器中占用的字符組數量整數或者浮點數等等。一個行列的矩陣的是數組中所有元素的數量數組中元素的類型,例如或者數組中每個元素的大小,單位為字節存儲數組元素的緩沖。
原文鏈接
numPy維基百科
特點NumPy引用CPython(一個使用字節碼的解釋器),而在這個Python實現解釋器上所寫的數學算法代碼通常遠比編譯過的相同代碼要來得慢。為了解決這個難題,NumPy引入了多維數組以及可以直接有效率地操作多維數組的函數與運算符。因此在NumPy上只要能被表示為針對數組或矩陣運算的算法,其運行效率幾乎都可以與編譯過的等效C語言代碼一樣快。[1]
NumPy提供了與MATLAB相似的功能與操作方式,因為兩者皆為解釋型語言,并且都可以讓用戶在針對數組或矩陣運算時提供較標量運算更快的性能。兩者相較之下,MATLAB提供了大量的擴充工具箱(例如Simulink);而NumPy則是根基于Python這個更現代、完整并且開放源代碼的編程語言之上。此外NumPy也可以結合其它的Python擴充庫。例如SciPy,這個庫提供了更多與MATLAB相似的功能;以及Matplotlib,這是一個與MATLAB內置繪圖功能類似的庫。而從本質上來說,NumPy與MATLAB同樣是利用BLAS與LAPACK來提供高效率的線性代數運算
ndarray 數據結構NumPy的核心功能是"ndarray"(即n-dimensional array,多維數組)數據結構。這是一個表示多維度、同質并且固定大小的數組對象。而由一個與此數組相關系的數據類型對象來描述其數組元素的數據格式(例如其字符組順序、在存儲器中占用的字符組數量、整數或者浮點數等等)。
數組創建NumPy的基礎是一個同構的多維數據,數組中的元素可以通過下標來索引。在NumPy中,維度稱之為axis(復數是axes),維度的數量稱之為rank。
首先獲取NumPy,具體方式請打開鏈接
默認書寫方式
import numpy as np
創建data1、data2兩個普通數組,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函數來創建NumPy的數組
>>> 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的數組類是ndarray,它有一個別名是 numpy.array,但這與Python標準庫的array.array并不一樣。后者僅僅是一個一維數組。而ndarray具有以下的屬性:
ndarray.ndim:數組的維數。在Python世界中,維數稱之為rank
ndarray.shape:數組的維度。這是一系列數字,長度由數組的維度(ndim)決定。例如:長度為n的一維數組的shape是n。一個n行m列的矩陣的shape是n,m
ndarray.size:數組中所有元素的數量
ndarray.dtype:數組中元素的類型,例如numpy.int32, numpy.int16或者numpy.float64
ndarray.itemsize:數組中每個元素的大小,單位為字節
ndarray.data:存儲數組元素的緩沖。通常我們只需要通過下標來訪問元素,而不需要訪問緩沖
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創建指定的數組
指定rank為2:
>>> np.array([1, 2, 3], ndmin=2) array([[1, 2, 3]])
指定為complex類型的數據:
>>> np.array([1, 2, 3], dtype=complex) array([1.+0.j, 2.+0.j, 3.+0.j])
生成數組并賦為特殊值:
ones:全1
zeros:全0
empty:隨機數,取決于內存情況
>>> 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(最小值,最大值,元素數量)
>>> 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.])
生成隨機數random:
>>> np.random.random((2,3)) array([[0.41604856, 0.7216842 , 0.88832856], [0.42092882, 0.44241471, 0.07187805]])Shape與操作
根據已有數組進行相關的操作來產生一些新的數據結構
reshape:根據已有數組和指定的shape,生成一個新的數組
>>> 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]])
注意:形狀變化的原則是數組元素不能發生改變,比如這樣寫就是錯誤的,因為數組元素發生了變化。
>>> b.reshape((4,3)) Traceback (most recent call last): File "", line 1, inValueError: cannot reshape array of size 10 into shape (4,3)
vstack:用來將多個數組在垂直(v代表vertical)方向拼接(數組的維度必須匹配)
>>> 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:用來將多個數組在水平(h代表horizontal)方向拼接(數組的維度必須匹配)
np.hstack((a1,a2,a3)) array([1, 2, 3, 4, 5, 6, 7, 8, 9])
hsplit:用來將數組在水平方向拆分
>>> b1 = np.vstack((a1,a2,a3)) >>> np.hsplit(b1,3) [array([[1], [4], [7]]), array([[2], [5], [8]]), array([[3], [6], [9]])]
vsplit:用來將數組在垂直方向拆分
>>> 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])
數組相乘,對應位置相乘
>>> 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]])
內置函數(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進行數據分析 密碼: s8wx
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41529.html
摘要:貢獻者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長時間,如果你一本書一本書看的話,的確要用很長時間。為了方便大家,我就把每本書的章節拆開,再按照知識點合并,手動整理了這個知識樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻者:飛龍版...
摘要:不過,深度學習并不是人類可以創造的完美人工智能科技的終點。深度學習的公正性并非來自其自身,而是人類篩選和準備的深度學習數據。深度學習給出的是非自然合法語言解釋的結果。 現在每一個人都正在學習,或者正打算學習深度學習,它是目前人工智能諸多流派中興起的一個。各個年齡階段的數十萬人都在學習著免費和收費的深度學習課程。太多的創業公司和產品的命名以深度開頭,深度學習已然成了一個流行語,但其真正的落地應...
摘要:絕大多數人忽略了深度學習只占機器學習領域的,而機器學習又只占到了人工智能領域的。一個深度學習專家無法與人工智能專家劃上等號。但是,深度學習并不是人類可以創造的人工智能科技的終點。深度學習的公正性并非來自其自身,而是人類篩選和準備的數據。 人工智能的這一波熱潮毫無疑問是由深度學習引發的,自吳恩達等人 2011 年發表「識別貓」研究后,深度學習及其引發的技術已經在圖像識別、游戲等任務中超越人類,...
摘要:普通程序員,如何轉向人工智能方向,是知乎上的一個問題。領域簡介,也就是人工智能,并不僅僅包括機器學習。但是,人工智能并不等同于機器學習,這點在進入這個領域時一定要認識清楚。 人工智能已經成為越來越火的一個方向。普通程序員,如何轉向人工智能方向,是知乎上的一個問題。本文是對此問題的一個回答的歸檔版。相比原回答有所內容增加。 目的 本文的目的是給出一個簡單的,平滑的,易于實現的學習方法,幫...
閱讀 3606·2021-11-23 09:51
閱讀 1479·2021-11-04 16:08
閱讀 3551·2021-09-02 09:54
閱讀 3619·2019-08-30 15:55
閱讀 2600·2019-08-30 15:54
閱讀 961·2019-08-29 16:30
閱讀 2050·2019-08-29 16:15
閱讀 2320·2019-08-29 14:05