NumPy 基本运算

11 篇文章 0 订阅
原文地址: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.])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值