3.5 数组运算

  ufunc是universal function的缩写,它是一种能对数组的每个元素进行操作的函数。本节主要介绍算术运算、比较运算和统计运算等函数。

3.5.1 算术运算

  add()函数,即加法运算,是最常用的算术运算函数。示例代码:

>>>a = np.arange(0, 4)
>>>a
array( [0, 1, 2, 3] )
>>>b = np.arange(1, 5)
>>>b
array( [1, 2, 3, 4] )
>>>np.add(a, b)
array( [1, 3, 5, 7] )
>>>np.add(a, b, a)
array( [1, 3, 5, 7] )
>>>a
array( [1, 3, 5, 7] )

  add()函数返回一个新的数组,此数组的每个元素都为两个参数数组的对应元素之和。它接受的第3个参数指定计算结果所要写入的数组,如果指定的话,add()函数就不再产生新的数组。由于Python的操作符重载功能,计算两个数组相加可以简单地写为a + b,add(a, b, a)即表示为a+=b。
  与加法类似,每一个算术运算符与一个ufunc函数对应,如下表所示:

表达式对应的ufunc函数
y = x1 + x2add(x1, x2 [, y])
y = x1 - x2subtract(x1, x2 [, y])
y = x1 * x2multiply(x1, x2 [, y])
y = x1/x2divide(x1, x2 [, y]),如果两个数组的元素为整数,那么用整数除法
y = x1/x2true_divide(x1, x2 [, y]),总是返回精确的商
y = x1//x2floor_divide(x1, x2 [, y]),总是对返回的值取整
y = -xnegative(x [, y]),取反
y = x1 ** x2power(x1, x2 [, y])
y = x1 % x2remainder(x1, x2 [, y]),mod(x1, x2 [, y])

  数组对象支持算术运算操作符,极大地简化了算式的编写。除了基本的算术运算操作,ufunc也提供其他数学函数,如下表所示:

函数名功能说明
abs()绝对值
floor()向下取整
exp()指数函数
log()对数函数
sqrt()平方根函数
sin()正弦函数
cos()余弦函数

示例代码:

>>>a = np.array([1, 2, 3, 4])
>>>exp(a)
array([  2.71828183,   7.3890561 ,  20.08553692,  54.59815003])
>>>log(a)
array([ 0.        ,  0.69314718,  1.09861229,  1.38629436])
>>>sqrt(a)
array([ 1.        ,  1.41421356,  1.73205081,  2.        ])

3.5.2 比较运算

  使用==、>等比较运算符对两个数组进行比较,将返回一个布尔数组,它的每个元素值都是两个数组对应元素的比较结果。示例代码:

>>>np.array([1, 2, 3]) < np.array([3, 2, 1])
array( [True, False, False]), dtype = bool )

  每一个比较运算符与一个ufunc函数对应,如下表所示:

表达式对应的ufunc函数
y = x1 == x2equal(x1, x2 [, y])
y = x1 != x2not_equal(x1, x2 [, y])
y = x1 < x2less(x1, x2 [, y])
y = x1 <= x2less_equal(x1, x2 [, y])
y = x1 > x2greater(x1, x2 [, y])
y = x1 >= x2greater_equal(x1, x2 [, y])

  此外,一个数组也可以跟指定值进行比较,其规则等价于数组中的每个元素与指定值进行对比,结果为真返回True,为假返回False,示例代码:

>>>arr = np.random.randint(0,10,size=(4, 4))
>>>arr
array([[6, 2, 5, 6],
       [3, 5, 1, 3],
       [0, 9, 0, 7],
       [2, 1, 7, 0]])
>>>arr == 1
array([[False, False, False, False],
       [False, False,  True, False],
       [False, False, False, False],
       [False,  True, False, False]], dtype=bool)
>>>arr > 3
array([[ True, False,  True,  True],
       [False,  True, False, False],
       [False,  True, False,  True],
       [False, False,  True, False]], dtype=bool)
>>>arr[:, 1] == 5          #指定第2列所有值是否等于5
array([False,  True, False, False], dtype=bool)

3.5.3 统计运算

  使用统计函数可以描述数组元素的各种统计指标,以sum()函数为例,sum()计算数组元素之和,当数组是多维时,它计算数组中所有元素之和。示例代码:

>>>a = np.random.randint(0, 10, size=(4, 5))
>>>a
>>>np.sum(a)

  如果指定axis参数,则求和运算沿着指定的轴进行。在上面的例子中,数组a的第0轴的长度是4,第1轴的长度是5。如果axis参数为1,则对每行上的5个数求和,所得的结果是长度为4的一维数组。如果参数axis为0,则对每列上的4个数求和,结果是长度为5的一维数组。示例代码:

>>>np.sum(a, axis = 1)
>>>np.sum(a, axis = 0)

主要使用的统计函数及功能如下表所示:

函数名功能
sum求和
mean求期望
median求中位数
std求标准差
var求方差
cumsum求累加和
min求最小值
max求最大值

  以上函数的参数与sum()相同,且注意axis参数参与运算的轴的对应位置。

3.5.5 数组排序

  ufunc函数除了参与对数组的各种运算,也提供对数组元素排序的方法和函数。注意,数组的sort()方法对数组进行排序,它会改变数组的内容;sort()函数返回一个新数组。它们的axis默认值都为-1,即沿着数组的最终轴进行排序。sort()函数的axis参数可以设置为None,此时它将得到平坦化之后进行排序的新数组。示例代码:

>>>a = np.random.randint(0, 10, size=(4, 5))
>>>a
array([[1, 2, 3, 0, 1],
       [4, 5, 3, 3, 7],
       [5, 8, 3, 4, 7],
       [3, 0, 6, 9, 0]])
>>>b = np.sort(a)
>>>b
array([[0, 1, 1, 2, 3],
       [3, 3, 4, 5, 7],
       [3, 4, 5, 7, 8],
       [0, 0, 3, 6, 9]])
>>>c = np.sort(a, axis = 0)
>>>c
array([[1, 0, 3, 0, 0],
       [3, 2, 3, 3, 1],
       [4, 5, 3, 4, 7],
       [5, 8, 6, 9, 7]])
>>>d = np.sort(a, axis = None)
>>>d
array([0, 0, 0, 1, 1, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6, 7, 7, 8, 9])
>>>a.sort()
>>>a
array([[0, 1, 1, 2, 3],
       [3, 3, 4, 5, 7],
       [3, 4, 5, 7, 8],
       [0, 0, 3, 6, 9]])

  在上面的例子中,np.sort(a)对a中每行的数组进行排序,np.sort(a, axis=0)对数组a每列上的数值进行排序,np.sort(a, axis = None)得到排序后的一维数组,以上三个函数没有改变数组a的内容;而a.sort()的方法则改变了数组a的内容,且以行进行排序(等价于axis=1)。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值