这里写目录标题
Numpy数组与矩阵(三)
1 数组排序
1.1 sort函数
我们首先来看sort函数的语法结构,如下所示:
ndarray.sort(a, axis = -1, kind = 'quicksort', order = None)
参数说明如下:
- a:我们需要进行排序的数组;
- axis:沿着数组的方向进行排序,0按行,1按列;
- kind:选择排序的算法,提供了快速排序、混合排序和堆排序等;
- order:如果数组中包含了字段,则我们要进行排序的字段。
下面我们通过一个实例来说明sort函数的用法,代码如下:
import numpy as np
a = np.random.randn(6)
print("原始数组:\n", a)
print("经过排序的数组:")
a.sort()
print(a)
当然,我们还可以对多维数组中的每个维度的值进行排序,代码如下:
import numpy as np
b = np.random.randn(4, 5)
print("数组b是:")
print(b)
print("调用sort函数之后经过排序后的数组b:")
print(np.sort(b))
print("按列排序后的数组b:")
print(np.sort(b, axis = 0))
1.2 argsort函数
argsort函数返回的是数组从大到小的索引值,argsort的语法结构和参数说明与sort函数是一致的,它的作用想过是对数组进行排序,返回的是一个排序后的索引,示例如下:
import numpy as np
a =- np.array([2, -1, 5, 7, -9, 4])
a.argsort()
当然,对于二维数组,argsort函数依然适用:
import numpy as np
a = np.array([[ 1, 5, 3], [ 2, 8, 5], [ 3, 6, 0]])
print('原始数组a是:\n', a)
print('调用argsort函数之后的数组a:')
print(np.argsort(a))
print('按照列进行排序后的数组a:')
print(np.argsort(a, axis = 0))
2 函数
2.1 字符串函数
以下的函数可用于数据类型为string _或unicode _的数组执行向量化字符串操作,是基于Python内置库中的标准字符串函数,具体函数介绍如下表。
函数名 | 函数描述 |
---|---|
add | 对两个数组的逐个字符串元素进行连接 |
multiply | 返回元素多重连接后的字符串 |
center | 居中字符串 |
capitalize | 将字符串的第一个字母转换为大写 |
title | 将字符串的每个单词的第一个字母转换为大写 |
lower | 数组元素转换为小写 |
upper | 数组元素转换为大写 |
split | 指定分隔符对字符串进行分割,并返回数组列表 |
splitlines | 返回元素中的行元素,用换行符给分割 |
strip | 移除元素开头或者结尾处的特定字符 |
join | 通过指定分隔符来连接数组中的元素 |
replace | 使用新字符串替换字符串中的所有子字符串 |
decode | 数组元素依次调用str.decode |
encode | 数组元素依次调用str.encode |
我们将会介绍几种比较乘用的字符串函数,首先是numpy.char.add函数的使用,它的功能是依次对两个数组的元素进行字符串连接,实例如下:
import numpy as np
print('连接实例一:')
print(np.char.add(['Hello'], ['Numpy']))
print('连接实例二:')
print(np.char.add(['A', 'a'], ['B', 'b']))
接下来是numpy.char.capitalize函数,它的功能是将字符串的第一个字母转换为大写(数组中有多个元素时,将每个元素的首字母进行大写操作),示例如下:
import numpy as np
print(np.char.capitalize(['sober', 'cool']))
接下来将会介绍upper函数,它的功能是将元素的每个字母都大写,对每个元素调用的是str.upper,示例如下:
import numpy as np
print(np.char.upper(['numpy', 'pandas']))
print(np.char.upper('scipy'))
2.2 数学函数
Numpy中有许多大量的数学运算相关的函数,包括三角函数、算数运算函数、复数处理函数等。以下将会对相关函数进行举例说明。
函数 | 函数功能说明 |
---|---|
abs, fabs | 局绝对值 |
sqrt | 开方 |
square | 平方 |
exp | 指数 |
log, log10, log2, loglp | 对数 |
sign | 符号函数 |
ceil | 计算每个元素的上限整数,即大于或等于这个数的最小整数 |
floor | 计算每股元素的下限整数,即小于或等于这个数的最大整数 |
isnan | 返回布尔数组,指示每个元素值是否为NAN(不是数字) |
isdinite, isinf | 返回布尔阵列,指示每个元素是否有限(非负无穷,非空)或无限 |
cos, sin, tan, cosh, sinh, tanh | 三角函数 |
arcsin, arccos, arctan, arcsinh, arccosh, arctanh | 反三角函数 |
下面的例子我们将演示计算数组的开方、平方、指数函数等运算,如下所示:
import numpy as np
a = np.arange(5)
b = np.sqrt(a)
c = np.exp(a)
d = np.square(a)
print('数组a:\n', a)
print('数组a的开方:\n', b)
print('数组a的指数函数:\n', c)
print('数组a的平方:\n', d)
Numpy中还提供了不少的标准三角函数,像sin、cos、tan等,这样我们就可以房子包的使用三角函数来进行运算,示例如下:
import numpy as np
a = np.array([0, 30, 45, 60, 90, 180])
b = np.sin(a*np.pi/180)
c = np.cos(a*np.pi/180)
d = np.tan(a*np.pi/180)
print('数组a:\n', a)
print('数组中角度的正弦值:\n', b)
print('数组中角度的余弦值:\n', c)
print('数组中角度的正切值:\n', d)
2.3 算术函数
Numpy算术函数包含简单的加减乘除以及其他较为浮躁的算术函数,小表给出乘用的算术函数列表。我们在利用函数对数组进行计算的时候,需要注意数组必须具有相同的形状或者符合数组广播规则。
函数 | 函数功能说明 |
---|---|
add | 加 |
subtract | 减 |
multiply | 乘 |
divide,floor_divide | 除 |
power | 将第一个数组中的元素提升到第二个数组中指定的幂 |
maximum,fmax | 最大值 |
minimum,fmin | 最小值 |
mod | 除法余数 |
copysign | 将第二个参数中值的符号复制到第一个参数值的值 |
greater,greater_equal,less,loss_equal,equal,not_equal | 执行元素比较,生成布尔数组(相当于插入操作符>,>=,<,<=,==,!=) |
logical_and,logical_or,logical_xor | 计算逻辑运算的元素真值(等价于运算符&、|、^) |
实例说明:
import numpy as np
a = np.arange(25, dtype = np.float_).reshape(5, 5)
b = np.array([1, 2, 3, 4, 5])
c = np.add(a, b)
d = np.subtract(a, b)
e = np.multiply(a, b)
f = np.divide(a, b)
print('数组a:\n', a)
print('数组b:\n', b)
print('a and b with add:\n', c)
print('a and b with subtract:\n', d)
print('a and b with multiply:\n', e)
print('a and b with divide:\n', f)
2.4 统计函数
Numpy提供了众多的统计类函数,用于从数组中查找最小元素、最大元素、百分位标准差和方差等,下面给出数据分析中常见的统计函数。
函数 | 函数功能说明 |
---|---|
amin | 用来计算数组中的元素眼指定轴的最小值 |
amax | 用来计算数组中的元素眼指定轴的最大值 |
ptp | 用于计算数组中元素的最大值与最小值之差 |
percentile | 用于计算数组中的百分位数 |
median | 用于计算数组中元素的中位数 |
mean | 用于计算数组中元素的算术平均值 |
average | 根据在另一个数组中给出的格子的权重计算数组中元素的加权平均值 |
std | 用于计算数组中元素的标准差 |
var | 用于计算数组中元素的方差 |
-
我们首先介绍数组的最小值、最大值的计算函数amin和amax的用法:
import numpy as np a = np.array([[1, 4, 7, 3], [5, 6, 14, 33], [12, 4, 21, 9]]) print('数组a:\n', a) print('调用amin()函数计算最小值(axis = 1):\n', np.amin(a, 1)) print('调用amin()函数计算最小值(axis = 0):\n', np.amin(a, 0)) print('调用amin()函数计算最大值(axis = 1):\n', np.amax(a, 1)) print('调用amin()函数计算最大值(axis = 0):\n', np.amax(a, 0)) print('调用amin()函数计算最小值:\n', np.amin(a)) print('调用amin()函数计算最大值:\n', np.amax(a))
-
下面是ptp函数的示例说明:
import numpy as np a = np.array([[1, 4, 7, 3], [5, 6, 14, 33], [12, 4, 21, 9]]) print('数组a:\n', a) print('调用ptp()函数计算的极差:\n', np.ptp(a)) print('沿轴0调用ptp()函数计算的极差:\n', np.ptp(a, 0)) print('沿轴1调用ptp()函数计算的极差:\n', np.ptp(a, 1))
-
百分位数十数据分析统计中经常使用的度量方式,它的语法结构如下所示:
numpy.percentile(a, q, axis)
参数说明如下:
- a:输入数组;
- q:需要计算的百分位数,在0~100之间;
- axis:沿着该轴计算百分位数。
第P个百分位数是这样的值,它使得至少有p%的数据项小于或等于这个值,且至少有(100-p)% 的数据项大于或者等于这个值,示例如下:
import numpy as np a = np.array([[1, 4, 7, 3], [5, 6, 14, 33], [12, 4, 21, 9]]) print('数组a:\n', a) print('调用oercentile()函数(aixs= = 0, q = 10):\n', np.percentile(a, 10,axis = 0)) print('调用oercentile()函数(aixs= = 0, q = 50):\n', np.percentile(a, 50,axis = 0)) print('调用oercentile()函数(aixs= = 1, q = 50):\n', np.percentile(a, 50,axis = 1)) print('调用oercentile()函数(aixs= = 1, keepdims = True):\n', np.percentile(a, 10,axis = 0))
3 矩阵
Numpy中包含了一个矩阵库nmupy.matlib,这个模块的函数返回的是一个矩阵,而不是ndarray对象。
3.1 空矩阵
Numpy中的matlib.empty函数可以创建一个空矩阵,语法结构如下:
numpy.matlib.enpty(shape, dtype, order)
参数说明:
- shape:定义矩阵形状的整数或者是整数数组;
- dtype:定义矩阵的数据类型;
- order:C(行序优先)或者F(列序优先)。
以下实例是说明该如何创建空矩阵的:
import numpy as np
import numpy.matlib
a = np.matlib.empty((3, 3))
b = np.matlib.empty(3)
print('定义一个3*3的空矩阵:\n', a)
print('定义一个一维空矩阵:\n', b)
3.2 零矩阵
Numpy中的matlib.zeros函数可以创建一个用0来填充元素值的矩阵,下面是实例:
import numpy as np
import numpy.matlib
print(np.matlib.zeros((3, 3)))
3.3 全1矩阵
Numpy中的matlib.ones函数可以创建元素值都为1的矩阵,具体示例如下:
import numpy as np
import numpy.matlib
print(np.matlib.ones((3, 4)))
3.4 单位矩阵
单位矩阵是一个方阵,从左上角到右下角的对角线(我们称之为主对角线)上的元素均为1,除此之外的元素值都是0,Numpy中的matlib。identity函数就是返回指定大小的单位矩阵。
import numpy as np
import numpy.matlib
print(np.matlib.identity((5)))
3.5 对角矩阵
Numpy中的matlib.eye函数可以返回这样的一个矩阵,它的对角线元素都为1,其余位置的元素值都是0,语法结构如下:
numpy.matlib.eye(n, M, k, dtype)
参数说明:
- n:返回矩阵的行数;
- M:返回矩阵的列数,默认为n;
- k:对角线的索引;
- dtype:数据类型。
示例如下:
import numpy as np
import numpy.matlib
print(np.matlib.eye(n = 4, M = 7, k = 0, dtype = int))
3.6 随机矩阵
Numpy中的matlib.rand函数创建了一个给定大小的矩阵,数据是随机填充的,每次都不一样,具体形式如下举例:
import numpy as np
import numpy.matlib
print(np.matlib.rand(5, 6))