目录
上一篇 Numpy 模块简介_一分耕耘一分收获-CSDN博客
在上一篇中简单说了ndarray的一维数组和二维数组,这一篇主要讲二维数组的常用函数
一、常用函数
1. 间隔索引(花式索引)
一般的索引方式已经在上一篇讲过,其中提过一维数组的间隔索引。现在说说二维数组的间隔索引,又叫花式索引,指的是利用整数数组进行索引。
花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么就是对应位置的元素,如果目标是二维数组,那么索引的结果就是对应下标的行。
直接上代码吧
import numpy as np
#构造一个 8 行 4 列的 ndarray,二维数组
x=np.arange(32).reshape((8,4))
print(x)
运行结果是
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31]]
进行花式索引
print (x[[4,2,1,7]])
运行结果是
[[16 17 18 19] [ 8 9 10 11] [ 4 5 6 7] [28 29 30 31]]
可以看到得到的结果依然是一个二维数组,其中分布是原来二维数组的第 5、3、2、8 行(索引值从 0 开始计算),这种简单的[[index1,index2,....]]花式索引一定要记牢。
2. 数学运算符
先说常用的+,-,*,%,**吧,看一遍代码运行就明白了,在以前对 列表 list 或者元组 tuple里面每个数组进行操作时候,你可能用过lambda、map、reduce、filter 等等函数可能,用过[ ] 中括号,当时觉得代码已经很优美简单,但是遇上 Numpy,那些都是浮云。
#数学运算符
print("*"*40)
print(x)
print("*"*40)
print(x+3)
print("*"*40)
print(x*2)
print("*"*40)
print(x%2)
print("*"*40)
print(x**2)
运行结果是
**************************************** [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31]] **************************************** [[ 3 4 5 6] [ 7 8 9 10] [11 12 13 14] [15 16 17 18] [19 20 21 22] [23 24 25 26] [27 28 29 30] [31 32 33 34]] **************************************** [[ 0 2 4 6] [ 8 10 12 14] [16 18 20 22] [24 26 28 30] [32 34 36 38] [40 42 44 46] [48 50 52 54] [56 58 60 62]] **************************************** [[0 1 0 1] [0 1 0 1] [0 1 0 1] [0 1 0 1] [0 1 0 1] [0 1 0 1] [0 1 0 1] [0 1 0 1]] **************************************** [[ 0 1 4 9] [ 16 25 36 49] [ 64 81 100 121] [144 169 196 225] [256 289 324 361] [400 441 484 529] [576 625 676 729] [784 841 900 961]]
3. 比较运算符和相关函数
符号 | 函数 | 含义 |
> | np.greater(arr1,arr2) | 判断arr1的元素是否大于arr2的元素 |
>= | np.greater_equal(arr1,arr2) | 判断arr1的元素是否大于等于arr2的元素 |
< | np.less(arr1,arr2) | 判断arr1的元素是否小于arr2的元素 |
<= | np.less_equal(arr1,arr2) | 判断arr1的元素是否小于等于arr2的元素 |
== | np.equal(arr1,arr2) | 判断arr1的元素是否等于arr2的元素 |
!= | np.not_equal(arr1,arr2) | 判断arr1的元素是否不等于arr2的元素 |
同样上代码
#创建两个 ndarray
a=np.arange(10)
b=np.array(list(range(5,15)))
print(a)
print(b)
#算数比较
print(a < b )
print(a <=b )
print(a >b )
print(a >=b )
print(a != b)
print(a == b)
print(np.less(a,b))
print(np.less_equal(a,b))
print(np.greater(a,b))
print(np.greater_equal(a,b))
print(np.not_equal(a,b))
print(np.equal(a,b))
运行结果是
[0 1 2 3 4 5 6 7 8 9] [ 5 6 7 8 9 10 11 12 13 14][ True True True True True True True True True True] [ True True True True True True True True True True] [False False False False False False False False False False] [False False False False False False False False False False] [ True True True True True True True True True True] [False False False False False False False False False False] [ True True True True True True True True True True] [ True True True True True True True True True True] [False False False False False False False False False False] [False False False False False False False False False False] [ True True True True True True True True True True] [False False False False False False False False False False]
4. 常用的数学函数
太简单了,不写代码了
函数 | 函数说明 |
---|---|
np.round(arr) | 对各元素四舍五入 |
np.sqrt(arr) | 计算各元素的算术平方根 |
np.square(arr) | 计算各元素的平方值 |
np.exp(arr) | 计算以e为底的指数 |
np.power(arr, α) | 计算各元素的指数 |
np.log2(arr) | 计算以2为底各元素的对数 |
np.log10(arr) | 计算以10为底各元素的对数 |
np.add(arr1,arr2) | arr1,arr2 各个元素相加, arr2也可以是某个具体的数值 |
np.subtract(arr1,arr2) | arr1,arr2 各个元素相减, arr2也可以是某个具体的数值 |
np.multiply(arr1,arr2) | arr1,arr2 各个元素相乘, arr2也可以是某个具体的数值 |
np.divide(arr1,arr2) | arr1,arr2 各个元素相除, arr2也可以是某个具体的数值 |
5. 常用的统计函数
请注意下面每个函数都有一个参数 axis,即轴,轴是指数据的方向;
axis=0时,计算数组各列的统计值;
axis=1时,计算数组各行的统计值
不指定 axis,即默认时候,是对所有元素进行统计
函数 | 函数说明 |
---|---|
np.min(arr,axis) | 按照轴的方向计算最小值 |
np.mean(arr,axis) | 按照轴的方向计算平均值 |
np.max(arr,axis) | 按照轴的方向计算最大值 |
np.median(arr,axis ) | 按照轴的方向计算中位数 |
np.sum(arr,axis) | 按照轴的方向计算和 |
np.std(arr,axis) | 按照轴的方向计算标准差 |
np.var(arr,axis) | 按照轴的方向计算方差 |
直接上代码吧
#创建二维数组,5行6列
a=np.arange(30).reshape((5,6))
print(a)
print("-"*40)
print(np.min(a)) # 没有axis参数时候,默认是对所有元素进行统计
print(np.min(a,axis=0)) # axis = 0 ,对列进行统计
print(np.min(a,axis=1)) # axis = 1 ,对行进行统计
print("-"*40)
print(np.max(a))
print(np.max(a,axis=0))
print(np.max(a,axis=1))
print("-"*40)
print(np.mean(a))
print(np.mean(a,axis=0))
print(np.mean(a,axis=1))
print("-"*40)
print(np.sum(a))
print(np.sum(a,axis=0))
print(np.sum(a,axis=1))
运行结果是
[[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23] [24 25 26 27 28 29]] ---------------------------------------- 0 [0 1 2 3 4 5] [ 0 6 12 18 24] ---------------------------------------- 29 [24 25 26 27 28 29] [ 5 11 17 23 29] ---------------------------------------- 14.5 [12. 13. 14. 15. 16. 17.] [ 2.5 8.5 14.5 20.5 26.5] ---------------------------------------- 435 [60 65 70 75 80 85] [ 15 51 87 123 159]
6. 随机数生成
np.random 可以类似于random模块使用,常见的函数如下,需要的同学自己研究,不上代码了。
# 随机整数 np.random.randint()
# 随机均匀分布 np.random.randuniform()
# 随机正态分布 np.random.normal( )
7. 位运算操作符和相关函数
NumPy "bitwise_" 开头的函数是位运算函数。
NumPy 位运算包括以下几个函数:
函数 | 描述 | |
---|---|---|
& | bitwise_and | 对数组元素执行位与操作 |
| | bitwise_or | 对数组元素执行位或操作 |
~ | invert | 按位取反 |
<< | left_shift | 向左移动二进制表示的位 |
>> | right_shift | 向右移动二进制表示的位 |