Python学习笔记(9-1):数据分析——数据运算

在这里插入图片描述

文章导读

 - 课程难度:★★☆☆☆
 - 重要度:★★★☆☆
 - 预计学习时间:1小时
 - 简介:本节主要讲解了python数据分析中数据运算的部分,包括:(1)基于基础一、二元的各种运算、三角函数的创建与运算、指对数的各种运算、调整精度的方法以及求向量和、差分及乘积等运算;(2)列表、numpy数组、Series和Dataframe数据的排序与查找问题。
 - 重点涉及的函数和内容:np.round()、.sort()、sorted()、.argsort()、.sort_values()、.sort_index()、np.where()。

关于数学运算集中在numpy和scipy,而数据分析应用则主要集中在pandas。因此,我们在数据分析方面以DataFrame为素材讲解,在数学运算方面主要以numpy 数组为素材讲解,但有一些内置库的相似方法我们也会涉及。
我们首先将如下函数库引入:

import numpy as np
import pandas as pd
import scipy

一、算术运算

我们一般用numpy实现数学运算领域的各种功能,因此在这里主要围绕numpy进行讲解。当然,有许多函数名称、调用方法和返回结果相同的函数,也存在于内置方法库和pandas中,我们这里也会进行一一地讲解。
首先提一下我们常使用的一些科学常数。这里包括自然对数的底数e、欧拉常数γ(调和级数和自然对数差值的极限)、以及π。其余的np.nannp.inf等在之前讲解过:

np.e
np.euler_gamma
np.pi

我们首先建立部分将在后续经常用于展示运算效果的数据:

x = np.array([100.45, 100.02, 100.0, 99.97, 100.05])
x1 = np.array([104.15, 98.72, 100.0, 102.25, 99.65])
y = np.array([1.639, 0.578, 1.031, 1.031, 0.59])
z = np.array([-4.5, -3, 2.5, 0.76, -0.5])
w = np.array([np.inf, np.nan, float('nan'), 1e10, 500])

x_int = np.array([13, 25, 24, 16, 33])
y_int = np.array([7, 5, 15, 20, 22])

x_bit = np.array([0b0101, 0b0110, 0b0101, 0b1010, 0b1101])
y_mv = np.array([1, 1, 1, 1, 1])
y_bit = np.array([0b0011, 0b1010, 0b0101, 0b1101, 0b0111])

x_bool = np.array([True, False, True, True, False])
y_bool = np.array([False, False, True, False, True])

x_array = np.array([[1, 2],[3, 4],[5, 6]]) # 3 * 2矩阵
y_array = np.array([[1, 2, 3, 4],[5, 6, 7, 8]]) # 2 * 4矩阵

1、基础一元及二元运算

我们首先介绍我们最为基础的一些运算,包括我们的加减乘除等等。这些运算可以分成几类,例如分成一元或二元运算、分成算数计算、逻辑计算,算数计算其中还有位运算等等。
常用的算术运算符包括:

+-*/**			# 加、减、乘、除、乘方
//%					# 整数除法、整数除法的余数
&|~^				# 与、或、非、亦或运算
<<>>					# 位运算
@						# 矩阵乘法

常用的比较运算符包括:

<<=					# 小于、小于等于
>>=					# 大于、大于等于
==!=					# 等于、不等于

(1)一元算术运算

一元运算符首先包括+-~,分别表示正、负和按位取反:

+ x   			# np.positive(x) 
- x   			# np.negative(x) 
~x   			# np.invert(x_bit) 
~x_bool   		# np.invert(x_bool) 

执行上述代码,各自的运算结果如下:

[100.45 100.02 100.    99.97 100.05] 
[-100.45 -100.02 -100.    -99.97 -100.05] 
[ -6  -7  -6 -11 -14] 
[False  True False False  True]

其余一元运算函数包括:

np.modf(x) 		    # 原值的整数和小数部分,形式为以两个ndarray数组组成的元组
np.fabs(x)			# 原值的绝对值,另有np.absolute(x)
np.reciprocal(x) 	# 原值的倒数
np.sqrt(x) 		    # 原值的平方根 square root,等同于x ** (1/2)
np.cbrt(x) 		    # 原值的立方根 cube root,等同于x ** (1/3)
np.square(x) 		# 原值的平方,等同于x ** (2)

(2)二元算术运算

可以通过运算符完成的包括+-*///%**,这些运算符实现的运算含义和前面所描述的一致:

x + y 				# np.add(x, y) 
 x - y 				# np.subtract(x, y) 
 x * y 				# np.multiply(x, y) 
 x / y 				# np.divide(x, y), 另有np.true_divide(x, y)
 x // y 			# np.floor_divide(x, y) 
 x % y 				# np.mod(x, y), 另有np.fmod(x, y)、np.remainder(x, y)
 x ** y 			# np.power(x, y), 另有np.float_power(x, y)
 x_array @ y_array 	# np.dot(x_array, y_array) 

各自的运算结果如下:

[102.089 100.598 101.031 101.001 100.64 ]
[98.811 99.442 98.969 98.939 99.46 ]
[164.63755  57.81156 103.1     103.06907  59.0295 ]
[ 61.28737035 173.0449827   96.99321048  96.96411251 169.57627119] 
[ 61. 173.  96.  96. 169.] 
[0.471 0.026 1.024 0.994 0.34 ]
[1910.71517777   14.32353453  115.34532578  115.30964964   15.14007703] 
[[11 14 17 20]
[23 30 37 44]
[35 46 57 68]]

其余二元算数函数包括:

np.divmod(x, y) 		# 同时返回相除的整数部分和余数,形式为以两个
					# ndarray数组组成的元组,等于floor_divide和mod的合并
np.gcd(x_int, y_int) 	# 最大公约数,greatset common divisor
np.lcm(x_int, y_int)		# 最小公倍数,lowest common multiple
np.maximum(x, x1) 		# 两个数组中对应元素的较大值,另有np.fmax(x, x1)
np.minimum(x, x1) 		# 两个数组中对应元素的较小值,另有np.fmin(x, x1)

各自的运算结果如下:

array([ 61., 173.,  96.,  96., 169.]), array([0.471, 0.026, 1.024, 0.994, 0.34 ])) 
[ 1  5  3  4 11]
[ 91  25 120  80  66]
[104.15 100.02 100.   102.25 100.05]
[100.45  98.72 100.    99.97  99.65]

(3)二元逻辑运算

首先是**布尔运算中的逻辑运算符&|~^在这里插入代码片

x_bool & y_bool 			# np.logical_and(x_bool, y_bool) 
x_bool | y_bool 			# np.logical_or(x_bool, y_bool) 
~x_bool 					# np.logical_not(x_bool) 
x_bool ^ y_bool 			# np.logical_xor(x_bool, y_bool) 

各自的运算结果如下:

[False False  True False False] 
[ True False  True  True  True] 
[False  True False False  True] 
[ True False False  True  True]

接下来是二进制位的逻辑运算符&|~^,这些符号同样适用于二进制位。为便于展示,这里用二进制形式展示各二进制值:

[format(intvalue, '#b') for intvalue in (x_bit & y_bit)] 	# np.bitwise_and(x_bit, y_bit)
											# 位运算的与运算
[format(intvalue, '#b') for intvalue in (x_bit | y_bit)]	# np.bitwise_or(x_bit, y_bit)
											# 位运算的或运算
[format(intvalue, '#b') for intvalue in (~x_bit)] 		# np.invert(x_bit)
											# 位运算的非运算
											# 原码为补码取反后加1
[format(intvalue, '#b') for intvalue in (x_bit ^ y_bit)] 	# np.bitwise_xor(x_bit, y_bit)
											# 位运算的异或运算

各自的运算结果如下:<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值