美文网首页
3.5 数组运算

3.5 数组运算

作者: 操作系统 | 来源:发表于2017-03-19 09:14 被阅读0次

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 + x2 add(x1, x2 [, y])
y = x1 - x2 subtract(x1, x2 [, y])
y = x1 * x2 multiply(x1, x2 [, y])
y = x1/x2 divide(x1, x2 [, y]),如果两个数组的元素为整数,那么用整数除法
y = x1/x2 true_divide(x1, x2 [, y]),总是返回精确的商
y = x1//x2 floor_divide(x1, x2 [, y]),总是对返回的值取整
y = -x negative(x [, y]),取反
y = x1 ** x2 power(x1, x2 [, y])
y = x1 % x2 remainder(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 == x2 equal(x1, x2 [, y])
y = x1 != x2 not_equal(x1, x2 [, y])
y = x1 < x2 less(x1, x2 [, y])
y = x1 <= x2 less_equal(x1, x2 [, y])
y = x1 > x2 greater(x1, x2 [, y])
y = x1 >= x2 greater_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
>>>b = np.sort(a)
>>>c = np.sort(a, axis = 0)
>>>d = np.sort(a, axis = None)
>>>a
>>>b
>>>c
>>>d
>>>a.sort()
>>>a

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

相关文章

网友评论

      本文标题:3.5 数组运算

      本文链接:https://www.haomeiwen.com/subject/xapjnttx.html