数据挖掘Python基础之NumPy基础(下)

前言

前一篇文章我们已经对Numpy有了一个大概的认识,了解了ndarray的几种创建方法,它的索引与切片相关内容以及一些换轴操作。今天我们就来更加深入的了解Numpy的相关操作。

通用函数

通用函数,又可以称为ufunc,是一种在ndarray数据中进行逐元素操作的函数,有很多ufunc是简单的逐元素转换,它们被称为一元通用函数,比如sqrt或exp函数,分别进行开方操作和以e为底的指数。

代码如下

import numpy as np

arr = np.arange(10)
print(arr)
print(np.sqrt(arr))
print(np.exp(arr))

结果如下

[0 1 2 3 4 5 6 7 8 9]

[0.         1.         1.41421356 1.73205081 2.         2.23606798
 2.44948974 2.64575131 2.82842712 3.        ]
 
[1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01
 5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03
 2.98095799e+03 8.10308393e+03]

二元通用函数会接受两个数组作为参数,并且返回一个数组作为结果。例如add,maximum。maximum计算两个

代码如下

import numpy as np

arr1 = np.random.randn(8)
arr2 = np.random.randn(8)
print(arr1)
print(arr2)
print(np.add(arr1, arr2))
print(np.maximum(arr1, arr2))

结果如下

[-0.87594347 -0.12273679 -0.14468199  0.79499301  0.48304519  1.42611994
  0.18478049 -0.77634734]
  
[-1.22720664 -0.5021539  -0.46341915 -1.09360896 -0.11567866  1.44262963
  1.3676035   0.87728414]
  
[-2.10315011 -0.62489069 -0.60810113 -0.29861595  0.36736653  2.86874957
  1.55238399  0.1009368 ]
  
[-0.87594347 -0.12273679 -0.14468199  0.79499301  0.48304519  1.44262963
  1.3676035   0.87728414]

常用的通用函数如下

一元通用函数
函数名描述
abs计算绝对值
aqrt计算平方根(与arr**0.5相等)
square计算平方(与arr**2相等)
二元通用函数
函数名描述
add相加
subtract在第二个数组中,将第一个数据包含的元素去除
multiply将数组元素相乘
divide,floor_divide除或整除
power将第二个数组的值作为第一个数组的幂次方
maximum, fmax计算最大值,fmax忽略NaN
minimum,fmin计算最小值,fmin忽略NaN
mod求模

面向数组编程

使用NumPy数组可以使你利用简单的数组表达式完成多种数据操作任务,而无需写些大量循环。这种利用数组表达式代替显示循环的方法称为向量化。

在NumPy中np.where就是三元表达式 x if condition else y的向量化版本。where在数据分析中的一个典型用法就是根据一个数组来生成一个新的数组。比如说你想将一个数组中的所有正值替换为2,所有负值替换为-2,用where实现就会非常简单,例子如下。

import numpy as np

arr = np.random.randn(4, 4)
arr1 = np.where(arr > 0, 2, -2)
print(arr)
print(arr1)

结果如下

[[-0.96494491  0.07379061 -1.27861559  1.00250552]
 [ 1.92868117 -0.71947891 -0.46209623 -0.25288092]
 [ 0.02809471  0.0156134  -0.41930177  0.4971246 ]
 [ 2.34854456  0.53715659  1.29290707 -1.5782504 ]]
 
[[-2  2 -2  2]
 [ 2 -2 -2 -2]
 [ 2  2 -2  2]
 [ 2  2  2 -2]]

数学与统计方法

许多关于计算整个数组统计值或者关于轴向数据的数学函数,可以作为数组类型的方法被调用,也可以调用顶层的NumPy函数。例子如下,mean是求平均值的函数。

代码如下

import numpy as np

arr = np.random.randn(5, 4)
print(arr)
print(arr.mean())
print(np.mean(arr))

结果如下

[[ 1.24215748  0.29118319 -0.15095341 -1.18315436]
 [ 0.34114254  0.67807088 -0.35850545 -0.0283722 ]
 [ 0.49374135  2.20303723  1.16090384  0.48882664]
 [ 0.7933995  -0.87707374  1.16431334 -0.9578789 ]
 [-0.96946034  0.80809035  1.2987827  -0.18680409]]
 
0.3125723270734698

0.3125723270734698

像mean、sum等函数可接收一个可选参数axis,这个参数可以用于计算定轴向上的统计值,形成一个下降一维度的数组,例如arr.mean(1)表示计算每一列的平均值,arr.sum(0)表示计算每一行的和。

代码如下

import numpy as np

arr = np.random.randn(5, 4)
print(arr)
print(arr.mean(1))
print(arr.sum(0))

结果如下

[[ 0.73681373 -0.47219867 -1.79257559  0.61201661]
 [-0.36828573 -0.94568274  0.19655693 -0.51870822]
 [-2.28839471  0.1913941   0.45310426  0.72263832]
 [ 0.78532131  0.86428249 -0.7225563  -0.6953199 ]
 [ 0.71222315  0.2859414   1.89264378 -0.60046051]]
 
[-0.22898598 -0.40902994 -0.23031451  0.0579319   0.57258696]

[-0.42232225 -0.07626342  0.02717308 -0.47983371]
基础数组统计方法
方法描述
sum沿着轴向计算所有元素累计和,0长度数组累计和为0
mean数学平均,0长度的数组平均值为NaN
std,var标准差和方差
min, max最小值和最大值
argmin, argmax最小值和最大值的位置
cumsum从0开始元素累计和
cumprod从1开始累积积

前面介绍过,布尔值会被强制为1(True)和0(False),因此sum通常可以用于计算布尔数组中True的个数。

代码如下

import numpy as np

arr = np.random.randn(5, 4)
print(arr)
print((arr > 0).sum())

结果如下

[[ 6.71705665e-02  1.61629530e-02  1.76841029e+00  4.23138695e-01]
 [ 1.12480214e-03 -4.01747051e-01  7.13198516e-01  2.19474387e+00]
 [ 1.72505405e+00 -7.08562407e-01  4.29636061e-01  1.03900746e-01]
 [-5.64386934e-01  1.94245960e+00 -3.59287169e-01 -1.57861659e+00]
 [-2.87704451e-01 -5.07660259e-01  5.56993656e-01  1.28515104e+00]]
 
13
唯一值与其他集合逻辑

Numpy包含了一些针对一维ndarray的基础集合操作,常用的一个方法是np.unique,返回数组中唯一值排序后形成的数组。

代码如下

import numpy as np

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
print(np.unique(names))

结果如下

['Bob' 'Joe' 'Will']

数组的集合操作

方法描述
unique(x)计算x的唯一值,并排序
intersect1d(x, y)计算x和y的交集并排序
union1d(x, y)计算x和y的并集并排序
in1d(x, y)计算x是否包含y,返回一个布尔值
setdiff1d(x,y)计算差集,在x中但不在y中的x的元素
setxor1d(x,y)计算异或,在x或y中,但不属于x,y交集的元素

线性代数

线性代数,比如矩阵乘法、分解、行列式等方阵是所有数组类库的重要组成部分。

方法描述
diag将一个方阵的对角元素作为一维数组返回,或者将一维数组换成一个方阵
dot矩阵点乘
trace计算对角元素和
det计算矩阵行列式
eig计算方阵的特征值和特征向量
inv计算方阵的逆矩阵
svd奇异值分解
lstsq计算Ax = b的最小二乘解

最后

今天我们了解了NumPy的通用函数、面向数组的编程和一些线性代数的相关内容。更多的精彩文章可以关注公众号QStack。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值