Numpy 新手教程(2)
翻譯自官方文檔Tentative?NumPy?Tutorial,有刪節(jié)。
基本操作
主要的算術(shù)運(yùn)算符都能夠應(yīng)用于數(shù)組類型,結(jié)果為相應(yīng)元素之間的運(yùn),返回值為一個新的數(shù)組。
>>> a = array( [20,30,40,50] ) >>> b = arange( 4 ) >>> b array([0, 1, 2, 3]) >>> c = a-b >>> c array([20, 29, 38, 47]) >>> b**2 array([0, 1, 4, 9]) >>> 10*sin(a) array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854]) >>> a<35 array([True, True, False, False], dtype=bool)</span>乘法操作符?*?表示的也是元素乘法。假設(shè)須要矩陣乘法,能夠使用dot函數(shù)或者生成一個matrix對象。?
>>> A = array( [[1,1], ... [0,1]] ) >>> B = array( [[2,0], ... [3,4]] ) >>> A*B # elementwise product array([[2, 0],[0, 4]]) >>> dot(A,B) # matrix product array([[5, 4],[3, 4]]) >>> a = ones((2,3), dtype=int) >>> b = random.random((2,3)) >>> a *= 3 >>> a array([[3, 3, 3],[3, 3, 3]]) >>> b += a >>> b array([[ 3.69092703, 3.8324276 , 3.0114541 ],[ 3.18679111, 3.3039349 , 3.37600289]]) >>> a += b # b is converted to integer type >>> a array([[6, 6, 6],[6, 6, 6]])</span>當(dāng)兩個不同元素類型的數(shù)組運(yùn)算時,結(jié)果的元素類型為兩者中更精確的那個。(類型提升)
>>> a = ones(3, dtype=int32) >>> b = linspace(0,pi,3) >>> b.dtype.name 'float64' >>> c = a+b >>> c array([ 1. , 2.57079633, 4.14159265]) >>> c.dtype.name 'float64' >>> d = exp(c*1j) >>> d array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,-0.54030231-0.84147098j]) >>> d.dtype.name 'complex128'</span>Array類型提供了很多內(nèi)置的運(yùn)算方法,比方。
>>> a = random.random((2,3)) >>> a array([[ 0.6903007 , 0.39168346, 0.16524769],[ 0.48819875, 0.77188505, 0.94792155]]) >>> a.sum() 3.4552372100521485 >>> a.min() 0.16524768654743593 >>> a.max() 0.9479215542670073</span>默認(rèn)情況下,?這些方法作用于整個?array,通過指定?axis,能夠使其僅僅作用于某一個?axis?:?
>>> b = arange(12).reshape(3,4) >>> b array([[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]]) >>> >>> b.sum(axis=0) # sum of each column array([12, 15, 18, 21]) >>> >>> b.min(axis=1) # min of each row array([0, 4, 8]) >>> >>> b.cumsum(axis=1) # cumulative sum along each row array([[ 0, 1, 3, 6],[ 4, 9, 15, 22],[ 8, 17, 27, 38]])</span>經(jīng)常使用函數(shù)
NumPy?提供了很多經(jīng)常使用函數(shù),如sin,?cos,?and?exp.?相同,這些函數(shù)作用于數(shù)組中每個元素,返回還有一個數(shù)組。
>>> B = arange(3) >>> B array([0, 1, 2]) >>> exp(B) array([ 1. , 2.71828183, 7.3890561 ]) >>> sqrt(B) array([ 0. , 1. , 1.41421356]) >>> C = array([2., -1., 4.]) >>> add(B, C) array([ 2., 0., 6.])</span>其它經(jīng)常使用函數(shù)包含:
all,?alltrue,?any,?apply?along?axis,?argmax,?argmin,?argsort,?average,?bincount,?ceil,?clip,?conj,?conjugate,?corrcoef,?cov,?cross,?cumprod,?cumsum,?diff,?dot,?floor,?inner,?inv,?lexsort,?max,?maximum,?mean,?median,?min,?minimum,?nonzero,?outer,?prod,?re,?round,?sometrue,?sort,?std,?sum,?trace,?transpose,?var,?vdot,?vectorize,?where
索引、切片、和迭代
與list類似,數(shù)組能夠通過下標(biāo)索引某一個元素。也能夠切片,能夠用迭代器迭代。
>>> a = arange(10)**3 >>> a array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729]) >>> a[2] 8 >>> a[2:5] array([ 8, 27, 64]) >>> a[:6:2] = -1000 # equivalent to a[0:6:2] = -1000; from start to position 6, exclusive, set every 2nd element to -1000 >>> a array([-1000, 1, -1000, 27, -1000, 125, 216, 343, 512, 729]) >>> a[ : :-1] # reversed a array([ 729, 512, 343, 216, 125, -1000, 27, -1000, 1, -1000]) >>> for i in a: ... print i**(1/3.), ... nan 1.0 nan 3.0 nan 5.0 6.0 7.0 8.0 9.0</span>多維數(shù)組能夠用tuple?來索引.??
>>> def f(x,y): ... return 10*x+y ... >>> b = fromfunction(f,(5,4),dtype=int) >>> b array([[ 0, 1, 2, 3],[10, 11, 12, 13],[20, 21, 22, 23],[30, 31, 32, 33],[40, 41, 42, 43]]) >>> b[2,3] 23 >>> b[0:5, 1] # each row in the second column of b array([ 1, 11, 21, 31, 41]) >>> b[ : ,1] # equivalent to the previous example array([ 1, 11, 21, 31, 41]) >>> b[1:3, : ] # each column in the second and third row of b array([[10, 11, 12, 13],[20, 21, 22, 23]]) >>> b[-1] # the last row. Equivalent to b[-1,:] array([40, 41, 42, 43])</span>省略號...表示那些列取完整的值,比方,假設(shè)x?的rank?=?5,那么?
- ?x[1,2,...]?is?equivalent?to?x[1,2,:,:,:],?
- ?x[...,3]?to?x[:,:,:,:,3]?and?
- ?x[4,...,5,:]?to?x[4,:,:,5,:].
>>> c = array( [ [[ 0, 1, 2], # a 3D array (two stacked 2D arrays) ... [ 10, 12, 13]], ... ... [[100,101,102], ... [110,112,113]] ] ) >>> c.shape (2, 2, 3) >>> c[1,...] # same as c[1,:,:] or c[1] array([[100, 101, 102],[110, 112, 113]]) >>> c[...,2] # same as c[:,:,2] array([[ 2, 13],[102, 113]])
多維數(shù)組迭代時以第一個維度為迭代單位:?
>>> for row in b: ... print row ... [0 1 2 3] [10 11 12 13] [20 21 22 23] [30 31 32 33] [40 41 42 43]假設(shè)我們想忽略維度。將多維數(shù)組當(dāng)做一個大的一維數(shù)組也是能夠的,以下是樣例
>>> for element in b.flat: ... print element, ... 0 1 2 3 10 11 12 13 20 21 22 23 30 31 32 33 40 41 42 43轉(zhuǎn)載于:https://www.cnblogs.com/jzdwajue/p/6881522.html
總結(jié)
以上是生活随笔為你收集整理的Numpy 新手教程(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NOI2014】起床困难综合症 贪心
- 下一篇: 欧拉路HDU3018