import numpy as np
'''
使用NumPy数组可以使你利用简单的数组表达式完成多种数据操作任务,而无须写些大量循环。这种利用数组表达式来替代显示循环的方法,称为向量化。
通常,向量化的数组操作会比纯Python的等价实现在速度上快一到两个数量级,这对所有种类的数值计算产生了最大的影响。
'''
#1、将条件逻辑作为数组操作
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
result = [(x if c else y) for x, y, c in zip(xarr, yarr, cond)]
#虽然可以用上述的列表推导式来获得结果,但是如果数组很大的话,速度会很慢;另外当数组是多维时,就无法奏效了,而使用np.where可以非常简单地完成
result = np.where(cond, xarr, yarr)
'''np.where的第二个和第三个参数并不需要是数组,它们可以是标量。where在数据分析中的一个典型用法是根据一个数组来生成一个新的数组。
假设有一个随机生成的矩阵数据,需要将其中的正值都替换成2,所有负值替换成-2,用np.where就可以很简单完成'''
arr = np.random.randn(4, 4)
print(arr)
print(np.where(arr > 0, 2, -2))
'''也可以使用np.where将标量和数组联合,将arr中的所有正值替换为常数2'''
print(np.where(arr > 0, 2, arr))
# 2、数学和统计方法
arr = np.random.randn(5, 4)
print(arr)
print("arr.sum(1)的结果是:{}".format(arr.sum(1))) #计算列轴向的累和(其实就是每一行的数字加起来)
print("arr.sum(0)的结果是:{}".format(arr.sum(0))) #计算行轴向的累和(其实就是每一列的数字加起来)
print("arr.mean(1)的结果是:{}".format(arr.mean(1))) #计算每一行的平均值
print("arr.mean(0)的结果是:{}".format(arr.mean(0))) #计算每一列的平均值
'''
NumPy数组中的元素索引
axis1
0 1 2
0 0,0 0,1 0,2
axis0 1 1,0 1,1 1,2
2 2,0 2,1 2,2
'''
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7])
print(arr.cumsum()) #返回:[ 0 1 3 6 10 15 21 28] 累积函数
arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
print(arr.cumsum(axis=0))
'''
输出:
[[ 0 1 2]
[ 3 5 7]
[ 9 12 15]]'''
print(arr.cumprod(axis=1))
'''
输出:
[[ 0 0 0]
[ 3 12 60]
[ 6 42 336]]
'''
'''
基础数组统计方法
方法 描述
sum 沿着轴向计算所有元素的累和,0长度的数组,累和为0
mean 数学平均,0长度的数组平均值为NaN
std, var 标准差和方差,可以选择自由度调整(默认分母是n)
min, max 最小值和最大值
argmin, argmax 最小值和最大值的位置
cumsum 从0开始元素累积和
cumprod 从1开始元素累积积'''
#3、布尔值数组的方法
arr = np.random.randn(100)
print((arr>0).sum()) #正值的个数
# '''对于布尔值数组,any检查数组中是否至少有一个True,而all检查是否每个值都是True'''
bools = np.array([False, False, True, False])
print(bools.any()) #返回True
print(bools.all()) #返回False
#4、排序
#np.sort返回的是已经排序好的数组拷贝,而不是对原数组按位置排序
arr = np.random.randn(6)
arr.sort()
print(arr)
#可以在多维数组中根据传递的axis值,沿着轴向对每个一维数组段进行排序:
arr = np.random.randn(5, 3)
print(arr)
arr.sort(1) #对列轴进行排序(也就是将每一行按从小到大排序)
print(arr)
#唯一值与其他集合逻辑
#在Python中一般的列表去重用set(集合:无序不重复元素集):
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
print(sorted(set(names)))
#在Numpy中,可以直接用np.unique,返回的是数组中唯一值排序后形成的数组
print(np.unique(names))
#np.in1d可以检查一个数组中的值是否在另外一个数组中,并返回一个布尔值数组:
values = np.array([6, 0, 0, 3, 2, 5, 6])
print(np.in1d(values, [2, 3, 6])) #返回:[ True False False True True False True]
'''
数组的集合操作
方法 描述
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交集的元素
'''
NumPy学习(3、使用数组进行面向数组编程)
最新推荐文章于 2021-12-08 10:59:15 发布