原文地址:http://blog.csdn.net/lsjseu/article/details/20359201
在原文基础上适当精简并更正少量原作者的笔误:
基本运算:
1. 数组的算术运算是按元素的。新的数组被创建并且被结果填充:
>>> 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 # X.^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)
2. 不像许多矩阵语言,NumPy中的乘法运算符 * 指示按元素计算,矩阵乘法可以使用 dot 函数或创建矩阵对象实现(参见教程中的矩阵章节)
>>> A = array([[1,1],
... [0,1]] )
>>> B = array([[2,0],
... [3,4]] )
>>>A*B # elementwiseproduct
array([[2, 0],
[0, 4]])
>>> dot(A,B) # matrix product
array([[5, 4],
[3, 4]])
3. 有些操作符像 += 和 *= 被用来更改已存在数组而不创建一个新的数组。
>>> 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 tointeger type !!!
>>> a
array([[6, 6, 6],
[6, 6, 6]])
4. 当运算的是不同类型的数组时,结果数组和更普遍和精确的数据类型一致(这种行为叫做upcast)。
>>> 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'
许多非数组运算,如计算数组所有元素之和,被作为ndarray类的方法实现:
>>> 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
5. 这些运算默认应用到数组好像它就是一个数字组成的列表,无关数组的形状。然而,指定 axis 参数你可以把运算应用到数组指定的轴(在NumPy中维度(dimensions)叫做轴(axes))上:
>>> 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 eachcolumn
array([12, 15, 18, 21])
>>>b.min(axis=1)
# min of each row
array([0, 4, 8])
>>>b.cumsum(axis=1)
# cumulative sumalong each row
array([[ 0, 1, 3, 6],
[ 4, 9, 15, 22],
[ 8, 17, 27, 38]])
6. 通用函数(ufunc)
NumPy提供常见的数学函数如 sin , cos 和 exp ,这些叫作“通用函数”(ufunc)。在NumPy里这些函数按数组的元素运算,产生一个数组作为输出。
>>> 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.])