Python筆記6----數組


1、Python 中的數組

形式:

  • 用list和tuple等數據結構表示數組

  一維數組:list=[1,2,3,4]

  二維數組:list=[[1,2,3],[4,5,6],[7,8,9]]

  • 用array模塊:array模塊需要加載,而且運用的較少

  通過array函數創建數組(數組中的元素可以不是同一種類型),array.array('B',range(5))   >>array('B',[1,2,3,4,5])

  提供append、insert和read等函數

標准安裝的Python中用列表(list)保存一組值,可以用來當作數組使用,不過由於列表的元素可以是任何對象,因此列表中所保存的是對象的指針。這樣為了保存一個簡單的[1,2,3],需要有3個指針和三個整數對象。對於數值運算來說這種結構顯然比較浪費內存和CPU計算時間。

此外Python還提供了一個array模塊,array對象和列表不同,它直接保存數值,和C語言的一維數組比較類似。但是由於它不支持多維,也沒有各種運算函數,因此也不適合做數值運算。

NumPy的誕生彌補了這些不足,NumPy提供了兩種基本的對象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(數組)是存儲單一數據類型的多維數組,而ufunc則是能夠對數組進行處理的函數。

(來自鏈接http://old.sebug.net/paper/books/scipydoc/numpy_intro.html)

2、ndarray

ndarray是Numpy中的基本數據結構,所有元素是同一種類型,優點:節省內存和提高CPU計算時間,有豐富的函數。

0:作用對象是index; 1:作用對象是columns。

(1)數組的創建:

import numpy as np

①array函數創建:x=np.array([(1,2,3),(4,5,6)])

    創建一維數組:np.array([元素1,元素2,……])

    創建二維數組:np.array ( [ [ 元素1,元素2……] , [ 元素1,元素2,…… ] ,[ ] , [ ] ] )

②arange:           x=np.arange(1,5,0.5)      >>array([1.,1.5,2.,2.5,3.,3.5,4.,4.5])

③random:          x=np.random.random((2,2))   >>array([[0.7999243,0.3454323].[0.3546543,0.4634535]])

④linspace:         x=np.linspace(1,2,5,endpoint=False)   >>array([1.,1.2,1.4,1.6,1.8])

⑤ones:              x=np.ones([2,3])   >>array([[1.,1.,1.],[1.,1.,1.]])

⑥zeros:             x=np.zeros((2,2))  >>array([[0.,0.],[0.,0.]])

⑦fromfunction:  x=np.fromfunction(lamda i,j:(i+1)*(j+1),(9,9))

結果為9*9乘法表。array([[1,2,3,4,5,6,7,8,9],              

                                        [2,4,6,8,10,12,14,16,18],

                                        [3,6,9……]

                                        ……

                                        [9,18,……,81]])

(2)數組的操作:

①array[1]   :選擇第二行所有元素

   array[0:2]:選擇從第一行到第二行的所有元素(索引2不包括,即第三行)

   array[:,[0,1]]:選擇所有行的第一列和第二列的元素

   array[1,[0,1]]:選擇第二行第1列和第2列的元素

②shape:數組的維數,shape[0]取行數,shape[1]取列數。

③size:元素總個數

④reshape():改變數組的大小。但是原數組不變,即aArray不變,變化結果在bArray

    aArray=np.array([[1,2,3],[4,5,6]])   bArray=aArray.reshape(1,6)

    >> aArray=array([[1,2,3],[4,5,6]])  

    >> bArray=array([[1,2,3,4,5,6]])

⑤resize():改變數組的大小。原數組改變了,即aArray變了

    aArray.resize(1,6)

    >> aArray= array([[1,2,3,4,5,6]])

⑥vstack():垂直方向拼接。

      cArray=np.array([[7,8,9]])

      np.vstack((aArray,cArray))

      >>array([[1,2,3],

                     [4,5,6],

                     [7,8,9]])

⑦hstack():水平方向拼接。

    np.hstack((aArray,cArray))

   >> array([[1,2,3,4,5,6,7,8,9]])

⑧+:(兩個大小不同的數組相加,是一種廣播的思想)

    aArray+cArray   >>array([[8,10,12],[11,13,15]])

⑨sort(): 排序 ,一維數組x排序,x.sort()

    二維數組y=([[3,1,2],[6,3,1]])排序是對每一行進行排序,y.sort(),結果為y=([[1,2,3],[1,3,6]])

統計運算:

①sum():所有元素的求和,aArray.sum()

②sum(axis=0):列求和

③min():所有元素最小值,aArray.min()

④argmax():返回最大值的索引

⑤mean():所有元素的均值

⑥var():方差

⑦std():標准差

線性代數:np.linalg模塊中的函數

①np.linalg.det(x):行列式

②np.linalg.inv(x):逆矩陣

③np.dot(x,x):x的內積

④np.linalg.solve():多元一次方程組求根

⑤np.linalg.eig():求特征值和特征向量

ufunc函數:

同樣的計算numpy的通用計算比math計算的要快。

 

Vectorize函數:對numpy數組中的每一個元素應用一個函數。
a = np.array([[[1, 2], [1]],
              [[2, 3, 3], [3, 4]]
              ])
print(a.shape)
count_fun = np.vectorize(lambda x: len(x))
print(count_fun(a))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM