NumPy基础:逻辑条件、统计方法、布尔型数组、排序、集合逻辑

利用数组进行数据处理

  1. np.meshgrid接受两个一维数组,并产生两个二维矩阵(对应两个数组中所有的(x,y)对)
# 计算 x**2 + y**2

import numpy as np
import matplotlib.pyplot as plt

points = np.arange(-5,5,0.1)
xs,ys = np.meshgrid(points,points)

z = np.sqrt(xs**2+ys**2)

将条件逻辑表述为数组运算

  1. np.where(condition,x,y) 函数是三元表达式 x if condition else y 的矢量化版本
  2. np.where()的第二个和第三个参数可以为数组或标量,大小可以不相等
  3. 在数据分析工作中,np.where()通常用于根据另一个数组产生一个新的数组
# 根据cond的值选取xarr和yarr的值

xarr = np.array([1.1, 1.2, 1.3, 1.4])
yarr = np.array([2.1, 2.2, 2.3, 2.4])
cond = np.array([True, False, True, True])

results = np.where(cond, xarr, yarr)
results   # results = [(x if c else y) for x,c,y in zip(xarr, cond, yarr)]


# 将正值替换成1,负值替换成0

arr = np.random.randn(4,4)
result = np.where(arr > 0, 1, 0)

result


# 根据两个布尔型数组cond1和cond2的组合实现不同的赋值

cond1 = np.array([True, False, True, False, False])
cond2 = np.array([True, True, False, False, True])

# result3 = []
# for i in range(5):
#    if cond1[i] and cond2[i]:
#        result3.append(0)
#    elif cond1[i]:
#        result3.append(1)
#    elif cond2[i]:
#        result3.append(2):
#    else:
#        reault3.append(3)

result3 = np.where(cond1 & cond2,0,
                   np.where(cond1, 1, np.where(cond2, 2, 3)))
result3
# 布尔值在计算过程中可以被当作0或1处理

result4 = 1 * (cond1 ^cond2) + 2 * (cond2 & ~cond1) + 3 * ~(cond1|cond2)

result4

数学和统计方法

  1. sum、mean、标准差std等聚合计算(aggregation,也叫约简reduction),当作数组的实例方法调用arr.mean(),或当作NumPy函数使用np.mean()
  2. mean和sum这类函数可以接受一个axis参数(用于计算该轴向上的统计值),最终结果返回一个少一维的数组
  3. 其他如cumsum和cumprod之类的方法则不聚和,而是产生一个由中间结果组成的数组
arr = np.empty((4,4))
for i in range(4):
    arr[i] = i
arr

基本数组统计方法

# 对数组中全部或某轴向的元素求和,零长度的数组sum为0
arr1 = arr.sum(1)

# 算术平均值,零长度数组mean值为NaN
arr2 = np.mean(arr,1)

# 标准差,自由度可调(默认为n)
arr3 = arr.std(0)

# 方差,自由度可调(默认为n)
arr4 = arr.var(0)

# 最大值
arr5 = arr.max()
# 最小值
arr6 = np.min(arr)

# 最大元素的索引
arr7 = arr.argmax()
# 最小元素的索引
arr8 = arr.argmin()

# 所有元素的累计和
arr9 = arr.cumsum()

# 所有元素的累计积
arr10 = arr.cumprod(1)

用于布尔型数组的方法

  1. 在统计方法中,布尔值会被强制转换为1(True)和0(False),sum可用于计数布尔型数组中的True值
  2. any方法用于测试数组中是否存在一个或多个True
  3. all检查数组中是否所有值都为True
# 计算正值的数量

arr = np.random.randn(100)
(arr>0).sum()

# any方法用于测试数组中是否存在一个或多个True,all检查数组中是否所有值都为True
bools = np.array([True, False, True])
bools.any()
bools.all()

any和all方法也可以用于非布尔型数组,非0的元素会被认为是True

排序

  1. sort方法,多维数组可以通过将轴编号传给sort,在任何一个轴上向上进行排序
  2. 顶级方法np.sort返回的是数组的已排序副本,而对实例本身调用sort方法则是对实例本身进行排序修改
  3. 计算数组分位数最简单的方法是对其进行排序,然后选取特定位置的值
# 排序
arr = np.random.randn(8)
arr.sort()

arr1 = np.random.randn(3,4)
arr1.sort(0)


# 计算 5%分位数

large_arr = np.random.randn(1000)
large_arr.sort()
large_arr[int(0.05*len(large_arr))]

数组的集合运算

# 找出数组中的唯一值,返回有序结果(相当于set)
arr1 = np.unique(arr)

# 计算x和y中的公共元素,返回有序结果
arr2 = np.intersect1d(xarr,yarr)

# 计算x和y的并集,返回有序结果
arr3 = np.union1d(xearr,yarr)

# 得到一个表示‘x的元素是否包含与y’的布尔型数组
arr4 = np.in1d(xarr,yarr)

# 集合的差,及元素在x中不在y中
arr5 = np.setdiff1d(xarr,yarry)

# 对称差(交集 - 并集)
arr6 = np.setxor1d(xarr,yarr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值