[python]-數據科學庫Numpy學習

一、Numpy簡介:

Python中用列表(list)保存一組值,可以用來當作數組使用,不過由于列表的元素可以是任何對象,因此列表中所保存的是對象的指針。這樣為了保存一個簡單的[1,2,3],需要有3個指針和三個整數對象。對于數值運算來說這種結構顯然比較浪費內存和CPU計算時間。此外Python還提供了一個array模塊,array對象和列表不同,它直接保存數值,和C語言的一維數組比較類似。但是由于它不支持多維,也沒有各種運算函數,因此也不適合做數值運算。

NumPy提供了兩種基本的對象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(下文統一稱之為數組)是存儲單一數據類型的多維數組,而ufunc則是能夠對數組進行處理的函數。

二、nadrray對象:

1、創建一個數組對象:

  • 函數生成:ones(),zeros(),eye(),diag()......
    • zeros:(4),zeros((5,2))生成全0的數組
    • >>> import numpy as np
      >>> np.zeros(5) //一維
      array([ 0.,  0.,  0.,  0.,  0.])
      >>> np.zeros((5,2))//二維
      array([[ 0., 0.],[ 0., 0.], [ 0., 0.], [ 0., 0.], [ 0., 0.]])

       >>> np.zeros((5,2,2))//三維
      ? array([[[ 0., 0.],
      ? ? ? ? ? [ 0., 0.]],

      ? ? ? ? ?[[ 0., 0.],
      ? ? ? ? ? [ 0., 0.]],

      ? ? ? ? ?[[ 0., 0.],
      ? ? ? ? ? [ 0., 0.]],

      ? ? ? ? ?[[ 0., 0.],
      ? ? ? ? ? [ 0., 0.]],

      ? ? ? ? ?[[ 0., 0.],
      ? ? ? ? ? [ 0., 0.]]])

    • ones():生成全1的數組
    • >>> import numpy as np
      >>> np.ones(10) //一維
      array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])
      >>> np.ones(10,dtype="int32")//一維
      array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

      ? >>> np.ones((4,1)) //二維
      ? array([[ 1.],
      ? ? ? ? ?[ 1.],
      ? ? ? ? ?[ 1.],
      ? ? ? ? ?[ 1.]])

    • arange函數:類似于list的range函數,通過指定初始值,終值,和步長來生成一維數組。(不包括終值)
    • import?numpy as np
      d = np.arange(0,10,1) e = np.arange(0,10,2) print (d) #---------------------------------- [0 1 2 3 4 5 6 7 8 9] [0 2 4 6 8]
    • linspace函數:通過指定初始值,終值和?元素個數來創建一維數組。(默認包含終值,可用endpoint關鍵字指定包含終值)
    • f = np.linspace(0,10,11,endpoint=False)
      print (f)
      #----------------------------------------
      [ 0.          0.90909091  1.81818182  2.72727273  3.63636364  4.545454555.45454545  6.36363636  7.27272727  8.18181818  9.09090909]
    • logspace函數:類似linspace創建等比數列,下面的例子產生1(10^0)到100(10^2)、有20個元素的等比數列:
    • g = np.logspace(0,2,20)
      print (g)
      [   1.            1.27427499    1.62377674    2.06913808    2.63665093.35981829    4.2813324     5.45559478    6.95192796    8.858667911.28837892   14.38449888   18.32980711   23.35721469   29.7635144237.92690191   48.32930239   61.58482111   78.47599704  100.        ]
    • frombuffer,fromstring,fromfile等函數可以從字節序列創建數組。python自負產是字符序列,每個字符占一個字節,因此如果從字符串s創建一個8bit的整數數組的話得到的每個元書就是字符的ascii碼值。
    • s= "abcdefgh"
      sa = np.fromstring(s,dtype = np.int8)
      print (sa)
      #--------------------------------------
      [ 97  98  99 100 101 102 103 104]
    • fromfuction函數:傳入一個函數來創建數組
    • def fun(i,j):return (i+1)*(j+1)
      fa = np.fromfunction(fun,(9,9)) #(9,9)表示數組的shape,傳給fun的書是每個元素的定位,有81個位置,可以得到81個元素
      print (fa)
      #---------------------------------------------------
      [[  1.   2.   3.   4.   5.   6.   7.   8.   9.][  2.   4.   6.   8.  10.  12.  14.  16.  18.][  3.   6.   9.  12.  15.  18.  21.  24.  27.][  4.   8.  12.  16.  20.  24.  28.  32.  36.][  5.  10.  15.  20.  25.  30.  35.  40.  45.][  6.  12.  18.  24.  30.  36.  42.  48.  54.][  7.  14.  21.  28.  35.  42.  49.  56.  63.][  8.  16.  24.  32.  40.  48.  56.  64.  72.][  9.  18.  27.  36.  45.  54.  63.  72.  81.]]
  • 序列傳入:
    • import numpy as np
      a = np.array([1,2,3,4,5])
      b = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
      print (a)
      print (b)
      #-------------------------------------------
      [1 2 3 4 5]
      [[ 1  2  3  4][ 4  5  6  7][ 7  8  9 10]]

2、數組的屬性:

    • ndim屬性:數組的維數
    • >>> np.ones((3,2))
      array([[ 1.,  1.],[ 1.,  1.],[ 1.,  1.]])
      >>> np.ones((3,2)).ndim
      2 #二維
    • size:數組元素的總個數,等于shape屬性中元組元素的乘積。
    • >>> np.ones((3,2)).size
      6 #6個元素
    • dtype屬性:查看或指定數組類型
    • print(a.dtype) # 數組的元素類型 int32,32bit整型數據
      print(b.dtype) # 數組的元素類型 int32
      aa = np.array([2,3,4,5,6],dtype = np.float)
      print (aa)
      #----------------------------------------------
      [ 2.  3.  4.  5.  6.]
    • shape屬性:查看或改變數組的大小
    • print(a.shape) #數組的大小 (5)
      print(b.shape) #數組的大小 shape (3,4)#修改shape來修改數組軸的大小:
      b.shape = (4,3)
      print (b)
      #--------------------------------------
      [[ 1  2  3][ 4  4  5] [ 6 7 7] [ 8 9 10]] #如果某個軸的值為-1,則會根據數組的總數計算此軸的長度。如b一共12個元素,修改shape b.shape = (2,-1) #那么就會得到一個2*6的數組 print (b) #-------------------------------------- [[ 1 2 3 4 4 5] [ 6 7 7 8 9 10]] b.shape = (6,-1) #那么就會得到一個6*2的數組 print (b) #-------------------------------------- [[ 1 2] [ 3 4] [ 4 5] [ 6 7] [ 7 8] [ 9 10]]
    • reshape屬性:修改一個數組的尺寸得到一個新數組,原數組不變,但是這兩個數組共享內存,如果修改值的話這兩個數組都會變。
    • c = a.reshape((5,1)) #此方法實驗證明:只能是x*y=數組的總元素才可以,這里1*5只能換成5*1
      print (c) #此時a的結構并沒改變,a,c共享內存。
      print (a)
      #--------------------------------------
      [[1][2][3][4][5]]
      [1 2 3 4 5]
      #修改a[1][2]的值
      a[2] = 100
      print (c) #此時a的結構并沒改變,a,c共享內存。
      print (a)
      #--------------------------------------
      [1 2 3 4 5]
      [[  1][  2][100][  4][  5]]
      [  1   2 100   4   5]

3、數組存取:

  • 切片法[[[----***逗號“,”分行,列。冒號“:”分范圍***---]]]
  • >>> import numpy as np
    >>> np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
    array([[ 1,  2,  3,  4],[ 4,  5,  6,  7],[ 7,  8,  9, 10]])
    >>> b = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]]) >>> b[0] array([1, 2, 3, 4]) >>> b[1] array([4, 5, 6, 7]) >>> b[1,2] 6 >>> b[1,3] 7 >>> b[1,-1] 7 >>> b[-1] array([ 7, 8, 9, 10]) >>> b[-1,2] 9 >>> b[-1,-2] 9
    >>> b[:-2] #0--負2列 array([[1, 2, 3, 4]]) >>> b[1:2] array([[4, 5, 6, 7]]) >>> b[1:3] array([[ 4, 5, 6, 7], [ 7, 8, 9, 10]])
    #*************矩陣的截取***********************

    ? >>> a=np.mat(np.random.randint(2,15,size=(3,3)))
    ? >>> a
    ? matrix([[ 4, 10, 14],
    ? ? ? ? ? [11, 3, 12],
    ? ? ? ? ? [ 4, 2, 12]])
    ? >>> a[1:,1:,]
    ? matrix([[ 3, 12],
    ? ? ? ? ? [ 2, 12]])

三、矩陣對象matrix:

numpy庫提供了matrix類,使用matrix類創建的是矩陣對象,它們的加減乘除運算缺省采用矩陣方式計算。但是由于NumPy中同時存在ndarray和matrix對象,因此很容易將兩者弄混。

  • 創建矩陣:matrix函數(也可以用簡寫mat)?a = np.matrix([[1,2,3],[5,5,6],[7,9,9]])?
  • #利用ones()創建一個2*4的全1矩陣
    >>> np.mat(np.ones((2,4))) 
    matrix([[ 1.,  1.,  1.,  1.],[ 1.,  1.,  1.,  1.]])
  • #用numpy的隨機數rand產生一個2*2的隨機數組并轉化成矩陣
    >>> np.mat(np.random.rand(2,2)) 
    matrix([[ 0.4340437 ,  0.98055453],[ 0.52937992,  0.81452857]])
    #產生一個2-8之間的整數數組大小是2*5,再轉換成矩陣。
    >>> np.mat(np.random.randint(2,8,size=(2,5)))
    matrix([[3, 6, 4, 4, 5],[3, 7, 7, 2, 3]])
    #eye()函數產生單位對角數組,轉換成單位對角陣
    >>> np.mat(np.eye(2,2,dtype=int))
    matrix([[1, 0],[0, 1]])
    >>> np.mat(np.eye(3,2,dtype=int))
    matrix([[1, 0],[0, 1], [0, 0]]) >>> np.mat(np.eye(3,3,dtype=int)) matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
    #將一維數組轉換成對角陣
    >>> np.mat(np.diag([1,2,3]))
    matrix([[1, 0, 0],[0, 2, 0],[0, 0, 3]])
    >>>
  • 矩陣運算:乘積,求逆,冪運算,轉置
    >>> import numpy as np
    >>> a = np.matrix([[1,2,3],[5,5,6],[7,9,9]])
    >>> a
    matrix([[1, 2, 3],[5, 5, 6],[7, 9, 9]]) >>> a**-1 #求逆 a.I也是a的逆 matrix([[-0.6 , 0.6 , -0.2 ], [-0.2 , -0.8 , 0.6 ], [ 0.66666667, 0.33333333, -0.33333333]]) >>> a*a**-1 #a乘a的逆,矩陣內積 matrix([[ 1.00000000e+00, 1.66533454e-16, -1.11022302e-16], [ 0.00000000e+00, 1.00000000e+00, -4.44089210e-16], [ 4.44089210e-16, 5.55111512e-17, 1.00000000e+00]])
    >>> a.T #a的轉置 matrix([[1, 5, 7], [2, 5, 9], [3, 6, 9]]) >>>
  • 矩陣函數:
    • dot():做矩陣乘法,一維數組做點積,二維數組做內積,不過乘積必須滿足矩陣相乘的形式(M(x,y)*M2(y,z)),兩個矩陣的行列必須對應,都是一維的話必須是一個行向量,一個列向量,可以用m.reshape(-1,1)將行向量轉為列向量,或者m.reshape(1,-1)將列向量轉為行向量。
    • inner():
    • outer():
  • 矩陣中更高級的一些運算可以在NumPy的線性代數子庫linalg中找到。例如inv函數計算逆矩陣,solve函數可以求解多元一次方程組。
  • >>> from numpy import linalg as ll
    >>> ll.inv(a) #求逆
    matrix([[-0.6       ,  0.6       , -0.2       ],[-0.2       , -0.8       ,  0.6       ],[ 0.66666667,  0.33333333, -0.33333333]])
    >>> a
    matrix([[1, 2, 3], [5, 5, 6], [7, 9, 9]])
參考:http://blog.csdn.net/sunny2038/article/details/9002531
參考:http://old.sebug.net/paper/books/scipydoc/numpy_intro.html#id8

轉載于:https://www.cnblogs.com/NextNight/p/6929937.html

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

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

相關文章

檢測一個點, 是否在一個半圓之內的方法

demo: http://jsbin.com/lihiwigaso 需求: 一個圓分成分部分, 鼠標滑上不同的區域顯示不同的顏色 思路: 先判斷這個點是否在圓之內, 再判斷是否在所在的三角形之內就可以了 所需要的全部源碼: <!DOCTYPE html> <html> <head><meta charset"utf-8&quo…

計算機網絡設備接地規范,網絡機房防雷接地的四種方式及靜電要求

編輯----河南新時代防雷由于計算機網絡系統的核心設備都放置在網絡機房內&#xff0c;因而網絡機房防雷接地有了較高的環境要求&#xff0c;良好的接地系統是保證機房計算機及網絡設備安全運行&#xff0c;以及工作人員人身安全的重要措施。直流地的接法通常采用網格地&#xf…

抓住尾部的StackOverFlowError

使用Java程序時可能要處理的一種更煩人的情況是StackOverFlowError&#xff0c;如果您有一個很好的可生產的測試用例&#xff0c;那么關于使用堆棧大小或設置條件斷點/某種痕跡 。 但是&#xff0c;如果您有一個測試案例可能一次失敗100次&#xff0c;或者像我的案例一樣在AWTM…

Gunicorn配置部分的翻譯

寫在前面&#xff0c;雖然翻譯得很爛&#xff0c;但也是我的勞動成果&#xff0c;轉載請注明出處&#xff0c;謝謝。 Gunicorn版本號19.7.1 Gunicorn配置 概述 三種配置方式 優先級如下&#xff0c;越后的優先級越大 1.框架的設置&#xff08;現在只有paster在用這個&#xff0…

臺式計算機風扇聲音大怎么處理,如何解決電腦電源風扇聲音大的問題?

現在的臺式機一般用3到5年后&#xff0c;一些問題自然也就慢慢表現出來了。很多網友在使用電腦過程中都有電腦風扇聲音大怎么辦的問題&#xff0c;電腦風扇聲音大就會讓人覺得使用電腦很不舒服&#xff0c;怎么辦好呢&#xff1f;出現重要的問題要如何解決好呢&#xff1f;現在…

jsp分頁功能

http://blog.csdn.net/xiazdong/article/details/6857515轉載于:https://www.cnblogs.com/Baronboy/p/6112403.html

Spring Security第1部分–具有數據庫的簡單登錄應用程序

什么是Spring Security&#xff1f; Spring Security是一個提供安全解決方案的框架&#xff0c;可在Web請求級別和方法級別上處理身份驗證和授權。 Spring安全性通過兩種方式處理安全性。 一種是安全的Web請求&#xff0c;另一種是在URL級別限制訪問。 Spring Security使用Serv…

計算機應用 winxp,2017年職稱計算機考試模塊WindowsXP試題

2017年職稱計算機考試模塊WindowsXP試題全國專業技術人員計算機應用能力考試是專業技術人員資格考試的一種。接下來應屆畢業生小編為大家搜索整理了2017年職稱計算機考試模塊WindowsXP試題&#xff0c;希望大家有所幫助。1. Windows XP中刪除某個文件的快捷方式【 A 】。A. 對原…

Python基礎(8)_迭代器、生成器、列表解析

一、迭代器 1、什么是迭代 1 重復   2 下次重復一定是基于上一次的結果而來 1 l[1,2,3,4] 2 count0 3 while count < len(l): 4 print(l[count]) 5 count1 迭代舉例2、可迭代對象 可進行.__iter__()操作的為可迭代對象 #print(isinstance(str1,Iterable)),判斷str…

Angularjs2-EXCEPTION: Response with status: 200 Ok for URL:

利用jsonp跨域請求數居&#xff0c;報錯 core.umd.js:3070 EXCEPTION: Response with status: 200 Ok for URL: 參考&#xff1a;stackoverflow 未解決。。。腦仁疼。。。有小伙伴也碰到過這個問題么&#xff1f; 16/11/30 問題解決 1.服務器端API允許跨域訪問(返回的數據添加允…

圖片無法刪除要計算機管理員,存在桌面的圖片刪不掉,怎么處理?提示是需要管理員權限。...

將下面代碼復制到記事本里&#xff0c;重命名為1.bat&#xff0c;然后打開&#xff0c;這時你右鍵圖片會出現管理員取得所有權&#xff0c;然后取得所有權后再刪除試試Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\runas]管理員取得所有權NoWorkingDirecto…

Java對象序列化的本機C / C ++類似性能

您是否曾經希望過像使用C 這樣的本地語言將Java對象轉換成字節流一樣快的速度&#xff1f; 如果您使用標準的Java序列化&#xff0c;您可能會對性能感到失望。 Java序列化的目的是與盡可能快而緊湊地序列化對象的目的截然不同。 為什么我們需要快速緊湊的序列化&#xff1f; 我…

WebStrom Sass 編譯配置 windows

第一步&#xff1a; 先安裝Ruby下載 一路next 安裝完成后打開開始菜單 打開后輸入 gem install sass sass -v 出現版本號說明成功 第二部配置webstorm 在webstorm中settings中搜索file watchers工具&#xff0c;在此工具中添加一個scss的watcher 確定&#xff0c;打開一個scss…

非本地跳轉之setjmp與longjmp

非本地跳轉(unlocal jump)是與本地跳轉相對應的一個概念。 本地跳轉主要指的是類似于goto語句的一系列應用&#xff0c;當設置了標志之后&#xff0c;可以跳到所在函數內部的標號上。然而&#xff0c;本地跳轉不能將控制權轉移到所在程序的任意地點&#xff0c;不能跨越函數&am…

清華計算機自主招生試題,2017年清華大學自主招生筆試題

2017年清華大學自主招生筆試題2017高考結束后&#xff0c;全國各大高校自主招生面試開始了&#xff0c;以下是百分網小編搜索整理的關于2017年清華大學自主招生筆試題&#xff0c;供各位參考&#xff0c;希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!…

擴展劑:模式還是反模式?

擴展器模式在最近幾年變得很流行&#xff0c;甚至已經在OSGi標準&#xff08;例如&#xff0c;藍圖服務和Web應用程序規范&#xff09;中使用。 在處女座&#xff0c;我們從一開始就與擴展程序一起工作&#xff0c;但是盡管它們具有優勢&#xff0c;但它們仍有一些明顯的缺點。…

python html格式編碼

web應用如用到ace等網絡編輯器的時候&#xff0c;如要支持html,xml等格式的文件編輯&#xff0c;輸入ace 的文本內容必須先進行html格式編碼&#xff1a; def html_escape(content): import cgi return cgi.escape(content)轉載于:https://www.cnblogs.com/zhouxiaoming/p/703…

字符串替換

題目: 給定一個英文的字符串, 要求你將其中的元音刪除掉, 返回新的字符串. 例如:"This website is for losers LOL!" --> "Ths wbst s fr lsrs LL!" 當看到這個題目的時候, 第一個想起的就是re模塊的正則表達式. 不過由于最近使用過字符串的replace方…

小學計算機技術指導綱要,《中小學信息技術課程指導綱要(試行)》

《中小學信息技術課程指導綱要(試行)》2000年11月教育部頒發的《中小學信息技術課程指導綱要(試行)》教學目標&#xff1a;1、 增強信息意識&#xff0c;了解信息技術的發展變化及其對工作和社會的影響。2、 初步了解計算機基本工作原理&#xff0c;學會使用與學習和實際生活直…

JavaFX 2.0布局窗格– FlowPane和TilePane

FlowPanes和TilePanes是不錯的布局窗格&#xff0c;如果您想一個接一個地連續地水平或垂直地布局子級&#xff0c;則可以。 它們彼此非常相似&#xff0c;因為它們都將子級布置成列&#xff08;在水平Flow / TilePane的情況下&#xff09;并按其寬度或行&#xff08;在垂直Flow…