您的位置:首页 > 编程语言 > Python开发

Numpy 入门教程(2)

2016-06-15 00:00 435 查看
翻译自官方文档Tentative NumPy Tutorial,有删节。

基本操作

基本的算术运算符都可以应用于数组类型,结果为对应元素之间的运,返回值为一个新的数组。

[python]
view plain
copy







>>> 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>

乘法操作符 * 表示的也是元素乘法,如果需要矩阵乘法,可以使用dot函数或者生成一个matrix对象。

[python]
view plain
copy







>>> 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>

当两个不同元素类型的数组运算时,结果的元素类型为两者中更精确的那个。(类型提升)

[python]
view plain
copy







>>> 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类型提供了许多内置的运算方法,比如。

[python]
view plain
copy







>>> 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>

默认情况下, 这些方法作用于整个 array,通过指定 axis,可以使其只作用于某一个 axis :

[python]
view plain
copy







>>> 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>

常用函数

NumPy 提供了许多常用函数,如sin, cos, and exp. 同样,这些函数作用于数组中每一个元素,返回另一个数组。

[python]
view plain
copy







>>> 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>

其他常用函数包括:

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类似,数组可以通过下标索引某一个元素,也可以切片,可以用迭代器迭代。

[python]
view plain
copy







>>> 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>

多维数组可以用tuple 来索引.

[python]
view plain
copy







>>> 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>

省略号...表示那些列取完整的值,比如,如果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,:].



[python]
view plain
copy







>>> c = array( [ [[ 0, 1, 2], # a 3D array&nb
3ff0
sp;(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]])

多维数组迭代时以第一个维度为迭代单位:

[python]
view plain
copy







>>> 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]

如果我们想忽略维度,将多维数组当做一个大的一维数组也是可以的,下面是例子

[python]
view plain
copy







>>> 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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: