大数据-Python数据分析2(numpy模块)
目录 前言 创建矩阵(使用 ndarray 对象) 获取矩阵的行数和列数(二维) 截取矩阵 按行列截取 条件拦截 矩阵组合 通过函数创建矩阵 排列 linspace 日志空间 个,零,眼,空 来自字符串 fromfunction 矩阵运算 常用矩阵运算符 常用矩阵函数 矩阵乘法(点乘法) 矩阵的转置 矩阵的逆 a_1 矩阵信息获取(如均值) 最大值和最小值 平均值 方差 标准差 中位数 求和 累计
目录
前言
创建矩阵(使用 ndarray 对象)
获取矩阵的行数和列数(二维)
截取矩阵
按行列截取
条件拦截
矩阵组合
通过函数创建矩阵
排列
linspace
日志空间
个,零,眼,空
来自字符串
fromfunction
矩阵运算
常用矩阵运算符
常用矩阵函数
矩阵乘法(点乘法)
矩阵的转置
矩阵的逆 a_1
矩阵信息获取(如均值)
最大值和最小值
平均值
方差
标准差
中位数
求和
累计和
前言
NumPy(Numerical Python)是Python语言的扩展,支持大量维数组和矩阵运算,以及大量用于数组运算的数学函数库。
创建矩阵(使用ndarray对象)
对于python中的numpy模块,通常使用它们提供的ndarray对象。通过将列表作为参数来创建 ndarray 对象很容易。例如:
import numpy as np #Introducing numpy 库
#创建一维数组对象
a u003d np.array([1,2,3,4,5])
#创建二维数组对象
a2 u003d np.array([[1,2,3,4,5],[6,7,8,9,10]])
#用它们的类比创建多维对象
获取矩阵的行数和列数(二维)
定制为用matlab编程,在遍历矩阵时,一般会先得到矩阵的行数和列数。要获取 narray 对象的每个维度的长度,可以使用 narray 对象的 shape 属性
将 numpy 导入为 np
a u003d np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(a.shape) #结果返回一个元组 tuple (2L, 5L)
print(a.shape[0]) #获取行数,返回2
print(a.shape[1]) #获取列数,返回5
截取矩阵
按行列截取
矩阵截取和list一样,可以用[](方括号)截取
将 numpy 导入为 np
a u003d np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(a[0:1]) #截取第一行并返回[[1 2 3 4 5]]
print(a[1,2:5]) #截取第二行第三第四列,返回到[8 9]
print(a[1,:]) #截取第二行返回[67 8 9 10]
条件拦截
条件拦截实际上是一个布尔语句,它本身在 [] (方括号)中传递
将 numpy 导入为 np
a u003d np.array([[1,2,3,4,5],[6,7,8,9,10]])
b u003d a[a>6] # 截取矩阵a中大于6的元素,范围为一维数组
print(b) # 返回 [7 8 9 10]
实际上,布尔语句首先生成一个布尔矩阵,通过在[](方括号)中传递它进行截断
打印(a>6)
"""
返回
[[假假假假]
[假真真真真假]]
"""
条件截取常用于将矩阵中满足一定条件的元素转换为特定值。例如,矩阵中大于 6 的元素被转换为 0
将 numpy 导入为 np
a u003d np.array([[1,2,3,4,5],[6,7,8,9,10]])
打印(一)
"""
起始矩阵是
[[ 1 2 3 4 5]
[ 6 7 8 9 10]]
"""
a[a % 2 u003du003d 0] u003d 0
打印(一)
"""
偶数归零后的矩阵为
[[1 0 3 0 5]
[0 7 0 9 0]]
"""
矩阵组合
矩阵的组合可以通过numpy中的hstack和vstack方法来实现
将 numpy 导入为 np
a1 u003d np.array([[1,2],[3,4]])
a2 u003d np.array([[5,6],[7,8]])
#!注意参数是作为列表或元组传入的
打印(np.hstack([a1,a2]))
"""
横向合并,返回如下结果
[[1 2 5 6]
[3 4 7 8]]
"""
打印(np.vstack((a1,a2)))
"""
垂直合并,返回如下结果
[[1 2]
[3 4]
[5 6]
[7 8]]
"""
矩阵的合并也可以使用 concatenatef 方法完成
np.concatenate( (a1,a2), axisu003d0 ) 等价于 np.vstack( (a1,a2) )
np.concatenate( (a1,a2), axisu003d1 ) 等价于 np.hstack( (a1,a2) )
按函数创建矩阵
numpy 模块带有创建 ndarray 对象的函数,这使得创建普通或常规矩阵变得容易。
范围
将 numpy 导入为 np
a u003d np.arange(10) # 默认从0到10(不包括10),步长为1
print(a) # 返回 [0 1 2 3 4 5 6 7 8 9]
a1 u003d np.arange(5,10) # 从 5 到 10(不包括 10),步长为 1
print(a1) # 返回到[5 6 7 8 9]
a2 u003d np.arange(5,20,2) # 从5到20(不包括20),步长为2
print(a2) # 返回 [5 7 9 11 13 15 17 19]
林空间
linspace() 与 matlab 的 linspace 类似,它创建指定数量的等间隔序列,并实际生成一个等差列。
将 numpy 导入为 np
linspace(start, stop, numu003d50, endpointu003dTrue, retstepu003dFalse, dtypeu003dNone, axisu003d0)
"""
开始:数组_like
序列的起始值。
停止:数组_like
序列的结束值,除非 `endpoint`设置为 False。
在这种情况下,序列由 ``num + 1``的最后一个组成
均匀分布的样本,因此 `stop`被排除在外。注意步骤
当 `endpoint`为 False 时,大小会发生变化。
num : int,可选
要生成的样本数。默认值为 50。必须为非负数。
端点:布尔值,可选
如果为真,`stop`是最后一个样本。否则,不包括在内。
默认为真。
retstep : bool,可选
如果为 True,则返回 (`samples`, `step`),其中 `step`是间距
样本之间。
dtype:dtype,可选
输出数组的类型。如果没有给出`dtype`,则推断数据
从其他输入参数中键入。
"""
a u003d np.linspace(0,10,5) # 生成从 0 到 10 的 7 个数字的等差列
打印(一)
结果 [0.2.5 5 5.7.5 10.]
a u003d np.linspace(0, 10, 5, restepu003dTrue)
结果(数组 ([0., 2.5, 5., 7.5, 10.]), 2.5)
-
开始:起始值
-
停止:结束值
-
num:要生成的数量,不写默认为50
-
端点:默认为True,表示停止,False表示不停止
-
restep:默认为False,如果设置为True,返回等差列和步长的元组
-
dtype:指定数据类型,默认从输入参数推断
日志空间
linspace用于生成等差列,logspace用于生成对数等比列
将 numpy 导入为 np
logspace(start, stop, numu003d50, endpointu003dTrue, baseu003d10.0, dtypeu003dNone, axisu003d0):
"""
返回在对数刻度上均匀分布的数字。
在线性空间中,序列从``base ** start``开始
(`base`的 `start`次方) 并以 ``base ** stop``结尾
(见下文 `endpoint`)。
.. 版本更改:: 1.16.0
现在支持非标量 `start`和 `stop`。
参数
开始:数组_like
``base ** start``是序列的起始值。
停止:数组_like
``base ** stop``是序列的最终值,除非`endpoint`
为假。在这种情况下,``num + 1``值在
日志空间中的间隔,除了最后一个(一系列
长度 `num`) 被返回。
num : 整数,可选
要生成的样本数。默认值为 50。
端点:布尔值,可选
如果为真,`stop`是最后一个样本。否则,不包括在内。
默认为真。
基础:浮动,可选
日志空间的基础。元素之间的步长
``ln(samples) / ln(base)``(或 ``log_base(samples)``)是一致的。
默认值为 10.0。
数据类型:数据类型
输出数组的类型。如果没有给出`dtype`,则推断数据
从其他输入参数中键入。
轴:int,可选
结果中用于存储样本的轴。仅在开始时相关
或 stop 类似于数组。默认情况下 (0),样本将沿着
在开头插入新轴。最后使用 -1 得到一个轴。
"""
a u003d np.logspace(0,2,5)
打印(一)
结果[1.3.16227766 10.31.6227766 100.]
-
开始:起始值
-
停止:结束值
-
num:元素个数,默认为50
-
端点:默认为True,表示停止,False表示不停止
-
Base:指定对数的底,默认为10
-
dtype:指定数据类型,默认从输入参数推断
-
轴:结果中的轴用于存储样本。仅当 start 或 stop 类似于数组时才相关。默认情况下 (0),样本将跟随在开头插入的新轴。使用 -1 获取轴的末端
将 numpy 导入为 np
a u003d np.logspace([0, 0], [2, 2], 5, 轴u003d-1)
b u003d np.logspace([0, 0], [2, 2], 5)
打印(一)
"""
[[ 1. 3.16227766 10. 31.6227766 100. ]
[ 1. 3.16227766 10. 31.6227766 100. ]]
"""
打印(b)
"""
[[ 1. 1. ]
[ 3.16227766 3.16227766]
[ 10. 10. ]
[ 31.6227766 31.6227766 ]
[100. 100.]]
"""
个,零,眼,空
one 创建全 1 矩阵 zeros 创建全 0 矩阵 eye 创建单位矩阵 empty 创建空矩阵(实际值)
将 numpy 导入为 np
a_ones u003d np.ones((3,4)) # 创建一个 3*4 Full 1 矩阵
打印(一个_ones)
"""
结果
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
"""
a_zeros u003d np.zeros((3,4)) # 创建一个3*4的全0矩阵
打印(a_zeros)
"""
结果
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
"""
a_eye u003d np.eye(3) # 创建一个三阶单位矩阵
打印(a_eye)
"""
结果
[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
"""
a_empty u003d np.empty((3,4)) # 创建一个3*4的空矩阵
打印(一个_empty)
"""
结果
[[ 1.78006111e-306 -3.13259416e-294 4.71524461e-309 1.94927842e+289]
[ 2.10230387e-309 5.42870216e+294 6.73606381e-310 3.82265219e-297]
[ i.24242356e-309 1.07034394e-296 2.1268797j+183 i.88703165j-315]]
"""
来自字符串
fromstring() 方法将字符串转换为 ndarray 对象,这在对字符串进行数字化以获得字符串的 ascii 序列时很有用
将 numpy 导入为 np
a u003d "abcdef"
b u003d np.fromstring(a,dtypeu003dnp.int8) # 因为一个字符是8,所以指定dtype为np.int8
print(b) # 返回 [97 98 99 100 101 102]
来自函数
fromfunction() 方法根据矩阵的行号和列号生成矩阵的元素。例如,创建一个矩阵,其中每个元素都是行号和列号的总和
将 numpy 导入为 np
定义函数(i,j):
返回 i+j
a u003d np.fromfunction(func,(5,6))
第一个参数为指定函数,第二个参数为列表或元组,表示矩阵的大小
打印(一)
"""
结果
[[ 0.1.2.3.4.5.]
[ 1. 2. 3. 4. 5. 6.]
[ 2. 3. 4. 5. 6. 7.]
[ 3. 4. 5. 6. 7. 8.]
[ 4. 5. 6. 7. 8. 9.]]
"""
矩阵运算
常用矩阵运算符
numpy 中的 ndarray 对象重载了许多运算符,这些运算符可用于对矩阵之间的对应元素执行操作。
操作员
解释
添加矩阵对应元素
-
矩阵对应元素的减法
*
矩阵对应元素的乘法
/
将矩阵的对应元素相除,如果都是整数则取商
%
矩阵对应元素相除后的余数
**
矩阵的每个元素都是 n 次方,例如**2:每个元素都是平方的
将 numpy 导入为 np
a1 u003d np.array([[4,5,6],[1,2,3]])
a2 u003d np.array([[6,5,4],[3,2,1]])
print(a1+a2) # 加法
"""
结果
[[10 10 10]
[ 4 4 4]]
"""
print(a1/a2) # 整数除法商
"""
结果
[[0 1 1]
[0 1 3]]
"""
print(a1%a2) # 除余数
"""
结果
[[4 0 2]
[1 0 0]]
"""
常用矩阵函数
同样,在 numpy 中定义了许多函数,可用于作用于矩阵中的每个元素。 numpy模块,import numpy as np,a默认是一个ndarray对象,导入到表中。
矩阵函数
解释
np.sin(a)
对矩阵 a 中的每个元素取正弦,sin(x)
np.cos(a)
矩阵 a 中每个元素的余弦,cos(x)
np.tan(a)
与矩阵 a 中的每个元素相切,tan(x)
np.face
取矩阵 a 中每个元素的反正弦,arcsin(x)
np.arccos(a)
取矩阵 a 中每个元素的反余弦,arccos(x)
np.arctan(a)
弧形 n(x)
np.exp(a)
对矩阵 a 中的每个元素取一个指数函数,例如
np.sqrt(a)
对矩阵 a x 中的每个元素求根
将 numpy 导入为 np
a u003d np.array([[1,2,3],[4,5,6]])
打印(np.sin(a))
"""
结果
[[ 0.84147098 0.90929743 0.14112001]
[-0.7568025 -0.95892427 -0.2794155 ]]
"""
打印(np.face(a))
"""
结果
C:\Users\Administrator\Desktop\learn.py:6: RuntimeWarning: 在 arcsin 中遇到无效值
打印(np.face(a))
[[ 1.57079633 在]
[在中]]
"""
当矩阵中的元素不在定义的域内时,RuntimeWarning 会导致 nan(不是数字)
矩阵乘法(点乘法)
矩阵乘法必须满足矩阵乘法的条件,即第一个矩阵的列数等于第二个矩阵的行数。
矩阵乘法的功能是点
将 numpy 导入为 np
a1 u003d np.array([[1,2,3],[4,5,6]]) # a1是一个2*3矩阵
a2 u003d np.array([[1,2],[3,4],[5,6]]) # a2是一个3*2矩阵
print(a1.shape[1]u003du003da2.shape[0]) # 真,满足矩阵乘法条件
打印(a1.dot(a2))
a1.dot(a2) 等价于 matlab 中的 a1*a2
而python中的a1*a2等价于matlab中的a1.*a2
"""
结果
[[22 28]
[49 64]]
"""
矩阵的转置
将 numpy 导入为 np
a u003d np.array([[1,2,3],[4,5,6]])
打印(a.转置())
"""
结果
[[1 4]
[2 5]
[3 6]]
"""
转置矩阵的更简单方法是 a.T.
将 numpy 导入为 np
a u003d np.array([[1,2,3],[4,5,6]])
打印(a.T)
"""
结果
[[1 4]
[2 5]
[3 6]]
"""
矩阵的逆a_1
要反转一个矩阵,需要先导入 numpy.linalg,然后使用 linalg 的 inv 函数进行反转。矩阵求逆要求矩阵的行数和列数相同
将 numpy 导入为 np
导入 numpy.linalg 作为 lg
a u003d np.array([[1,2,3],[4,5,6],[7,8,9]])
打印(lg.inv(a))
"""
结果
[[ -4.50359963j+15 p.00719925j+15 -4.50359963j+15]
[ p.00719925j+15 -1.80143985j+16p.00719925j+15]
[ -4.50359963j+15p.00719925j+15 -4.50359963j+15]]
"""
a u003d np.eye(3) # 三阶单位矩阵
print(lg.inv(a)) # 单位矩阵的逆是自己
"""
结果
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
"""
矩阵信息获取(如均值)
最大值和最小值
获取矩阵中元素的最大值和最小值的函数分别是max和min,用于获取整个矩阵、行或列的最大值和最小值。
将 numpy 导入为 np
a u003d np.array([[1,2,3],[4,5,6]])
print(a.max()) #获取整个矩阵的最大值 结果:6
print(a.min()) #结果:1
可以指定关键字参数axis来获取一行的最大(小)值或者一列的最大(小)值
#axisu003d0 行方向最大(小)值,即每一列的最大(小)值
#axisu003d1 列方向最大(小)值,即每一行的最大(小)值
例如
打印(a.max(轴 u003d 0))
结果是[45 6]
打印(a.max(轴 u003d 1))
结果是[3 6]
获取最大最小元素的位置,可以通过argmax函数获取
打印(a.argmax(轴 u003d 1))
结果是[2]
平均值
类似地,可以获得整个矩阵、行或列的平均值。
将 numpy 导入为 np
a u003d np.array([[1,2,3],[4,5,6]])
print(a.mean()) #结果为:3.5
同理,关键字axis参数可以让你指定取平均值的方向
print(a.mean(axisu003d0)) # 结果 [2.5 3.5 4.5]
print(a.mean(axisu003d1)) # 结果[2.5.]
方差
方差函数是var(),方差函数var()等价于函数mean(abs(x-x.mean())**2),其中x是一个矩阵
将 numpy 导入为 np
a u003d np.array([[1,2,3],[4,5,6]])
print(a.var()) # 结果 2.916666667
print(a.var(axisu003d0)) # 结果 [2.25 2.25 2.25]
print(a.var(axisu003d1)) # 结果[0.66666667 0.66666667]
标准差
标准差的函数是std()。 std() 等价于 sqrt (mean (abs (x-x.mean()**2)) 或 sqrt(x.var())
将 numpy 导入为 np
a u003d np.array([[1,2,3],[4,5,6]])
print(a.std()) # 结果 1.70782512766
print(a.std(axisu003d0)) # 结果 [1.5 1.5 1.5]
print(a.std(axisu003d1)) # 结果[0.81649658 0.81649658]
中位数
中位数是指序列按大小排序后的中间值,如果有偶数,则取中间两者的平均值。
比如序列[5,2,6,4,2],按大小顺序[2,2,4,5,6],中间是4,所以这个序列的中值为4.
或者序列[5,2,6,4,3,2],按大小顺序[2,2,3,4,5,6],因为有偶数,中间两个数是3,4,这个序列的中值为3.5。
中位数函数是median(),调用方法是numpy.median(x,[axis]),axis可以指定轴方向,默认axis u003d None,中位数为所有数字
将 numpy 导入为 np
x u003d np.array([[1,2,3],[4,5,6]])
print(np.median(x)) # 所有数字的中位数
结果 3.5
print(np.median(x,axisu003d0)) # 沿第一维的中位数
结果[2.5 3.5 4.5]
print(np.median(x,axisu003d1)) # 沿第二维的中位数
结果[2.5.]
求和
矩阵求和的函数是sum(),可以对行、列或者整个矩阵求和
将 numpy 导入为 np
a u003d np.array([[1,2,3],[4,5,6]])
print(a.sum()) # 对整个矩阵求和
结果 21
print(a.sum(axisu003d0)) # 求和行方向
结果[57 9]
print(a.sum(axisu003d1)) # 求和列方向
结果[6 15]
累计金额
一个位置的累积和是指该位置之前(包括)所有元素的总和。
例如一个序列[1,2,3,4,5],其累积和为[1,3,6,10,15],即第一个元素为1,第二个元素为1+2u003d3,...,第五个元素是1+2+3+4+5u003d15。
矩阵的累积求和函数是cumsum(),可以对行、列或整个矩阵求和
将 numpy 导入为 np
a u003d np.array([[1,2,3],[4,5,6]])
print(a.cumsum()) # 对整个矩阵求和
结果[1 3 6 10 15 21]
print(a.cumsum(axisu003d0)) # 行方向的累积和
"""
结果
[[1 2 3]
[5 7 9]]
"""
print(a.cumsum(axisu003d1)) # 列方向的累积和
"""
结果
[[ 1 3 6]
[ 4 9 15]]
"""
更多推荐
所有评论(0)