博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python【Numpy简单介绍】
阅读量:3941 次
发布时间:2019-05-24

本文共 5893 字,大约阅读时间需要 19 分钟。

Numpy

    今天来简单介绍一下Numpy中常见常用的函数以及方法。

1. 生成数组

  1. np.arange
    np.arange(min, max, step)  max不可取,step为步长,可为小数
    栗子:
    import numpy as np a = np.arange(0, 5, 0.5) print(a)  结果为: [0.  0.5  1.  1.5  2.  2.5  3.  3.5  4.  4.5]
  2. np.linspace
    linspace(min, max, length)  max可取,length表示从[min, max]之间的数平均分为几份
    栗子:
    c = np.linspace(0, 10, 11)print(c)结果为:[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
  3. range和np.arange的对比:
      range是个迭代器,加个np.array或者list可以展示迭代器生成的值
    range(min, max, step)  max不可取,步长step只能是整数
    栗子:
    b = np.array(range(0, 5, 1))print(b)结果为:[0 1 2 3 4]
    所以range和np.arange在生成数组上的区别在于步长是否可为小数,range不可以,而np.arange可以。

2. 数组和标量之间的运算

a = np.arange(1, 11)print(a)print(" ")print(a + 1)   # 数组中每个数都加1print(" ")print(a * 3)   # 数组中每个数都乘以3print(" ")print(a // 3 )   # 数组中每个数都整除3print(" ")print(a ** 0.5)  # 数组中每个数都开方print(" ")print(a > 0.5)   # 找出数组中大于0.5的数,大于返回True,反之返回False

结果为:

[ 1  2  3  4  5  6  7  8  9 10] [ 2  3  4  5  6  7  8  9 10 11] [ 3  6  9 12 15 18 21 24 27 30] [0 0 1 1 1 2 2 2 3 3] [1.         1.41421356 1.73205081 2.         2.23606798 2.44948974  2.64575131 2.82842712 3.         3.16227766] [ True  True  True  True  True  True  True  True  True  True]

3. 同样大小数组之间的运算

a = np.arange(1, 11)b = np.arange(10, 20)print(a + b)     # 数组a和数组b中对应的元素相加print(" ")print(a > b)     # 数组a和数组b中对应的元素相比,返回布尔型,a > b返回True,反之返回Falseprint(" ")print(a / b)     # 数组a的元素除以数组b中对应的元素print(" ")print(a ** b)   print(" ")print(a % b)    # 数组a的元素除余数组b中对应的元素print(" ")print(a == b)    # 判断数组a的元素是否数组b中对应的元素,返回布尔型

结果为:

[11 13 15 17 19 21 23 25 27 29] [False False False False False False False False False False] [0.1        0.18181818 0.25       0.30769231 0.35714286 0.4 0.4375     0.47058824 0.5        0.52631579] [          1        2048      531441    67108864  1808548329  2033549312 -1526366847           0 -1953380655 -1981284352] [ 1  2  3  4  5  6  7  8  9 10] [False False False False False False False False False False]

4. 数组和列表的区别

看个栗子:

a = np.arange(10)b = list(range(10))c = a[0:5]d = b[0:5]print(a)print(b)print("")c[0] = 20d[0] = 20print(a)print(b)

结果为:

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

可以发现这里对数组c的第一个值进行幅值,则a中的值也相应改变,这是因为c只是对a的引用,而pandas和数组numpy做数据分析的时候,可能会有很大的数组,占用较大的空间为了,省空间以及时间就直接引用,而d相当于是copy了列表b的一部分,是一个独立的列表,所以对它赋值不会对b造成影响,但如果不想改变a的值并对c赋值,可以使用c = a[0:5].copy()

5. 布尔型索引

怎么不通过遍历快速找到一个数组中大于5的元素呢?这里就可以用到我们的布尔型索引了!

a = np.arange(10)print(a)print(a > 5)print(a[a > 5])

结果为:

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

对于数组,输入一个元素均为bool型的列表作为索引,可以取出数组中为True的值

再举个例子:

a = np.arange(10)print(a[[True, False, False, True, True, False, True, False, True, True]])

结果为:

[0 3 4 6 8 9]

那怎么取出a中大于5的偶数呢?

法一: 先取出大于5的数,再从中取出偶数;或者顺序反一下也行

a = np.arange(10)b = a[a > 5]c = b[b % 2 == 0]print(c)

结果为: [6 8]

法二: 按位与&

print(a[(a > 5) & (a % 2 == 0)])

结果为: [6 8]

用括号是因为&的优先级比较高,如果不 用括号,就会出现5先和b相与,就会出现问题
再问,如何取出a中大于5的数或偶数?
可以使用按位或|

print(a[(a > 5) | (a % 2 == 0)])

结果为:[0 2 4 6 7 8 9]

6. 花式索引

如何取出列表中索引为1,3,4,5,8的元素?

a = np.arange(1, 11)print(a[[1, 3, 4, 5, 8]])

结果为: [2 4 5 6 9]

二维数组的花式索引:

# 取出b中第0行中大于2的数b = np.arange(20).reshape(4, 5)print(b[0, b[0] > 2])

结果为: [3 4]

但是,二维数组的花式索引和一位数组不太一样,举个例子:

print(b[[1, 3], [1, 3]])

结果为:[6 18]取出的是(1, 1) (3, 3)位置的值!

7. np.array的常用函数

  1. 开方函数: np.sqrt

    a = np.arange(0, 10, 0.5)print(np.sqrt(a))  # 对数组中的每个值进行开方运算

    结果为:

    [0.         0.70710678 1.         1.22474487 1.41421356 1.58113883 1.73205081 1.87082869 2.         2.12132034 2.23606798 2.34520788 2.44948974 2.54950976 2.64575131 2.73861279 2.82842712 2.91547595    3.082207  ]
  2. 取整函数: ceil、floor、trunc、rint

    a = np.arange(0, 10, 0.5)b = 1.5print(round(b))      # 四舍五入print(int(b))        # 向0取整print(np.floor(b))   # 向下取整print(np.ceil(b))    # 向上取整print(np.floor(a))   # 向下取整print(np.ceil(a))    # 向上取整print(np.trunc(a))   # 向0取整print(np.rint(a))    # 四舍五入

    结果为:

    211.02.0[0. 0. 1. 1. 2. 2. 3. 3. 4. 4. 5. 5. 6. 6. 7. 7. 8. 8. 9. 9.][ 0.  1.  1.  2.  2.  3.  3.  4.  4.  5.  5.  6.  6.  7.  7.  8.  8.  9.  9. 10.][0. 0. 1. 1. 2. 2. 3. 3. 4. 4. 5. 5. 6. 6. 7. 7. 8. 8. 9. 9.][ 0.  0.  1.  2.  2.  2.  3.  4.  4.  4.  5.  6.  6.  6.  7.  8.  8.  8.  9. 10.]
  3. 把小数和整数分开: np.modf

    x, z = np.modf(a)  # 把小数和整数分开print("小数部分为: ", x)print("整数部分为: ", z)

    结果为:

    小数部分为:  [0.  0.5 0.  0.5 0.  0.5 0.  0.5 0.  0.5 0.  0.5 0.  0.5 0.  0.5 0.  0.5 0.  0.5]整数部分为:  [0. 0. 1. 1. 2. 2. 3. 3. 4. 4. 5. 5. 6. 6. 7. 7. 8. 8. 9. 9.]
  4. 判断数组里是否有nan: np.isnan

    c = a / aprint(np.isnan(c))

    结果为:

    [ True False False False False False False False False False False False False False False False False False False False]
  5. 输出两个数组中较大或者较小的一位的数组:np.maximum、np.minimum

    d = np.array([1, 2, 5, 6, 7])e = np.array([2, 3, 4, 7, 9])print(np.maximum(d, e))  # 输出两个数组中较大的一位print(np.minimum(d, e))

    结果为:

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

8. np.array的统计方法

a = np.arange(10)print(a.sum())    # 求和print(a.mean())   # 求平均值print(a.std())    # 求标准差print(a.var())    # 求方差(表示整组数据的离散程度)# a.mean()+a.std()和a.mean()-a.std()可以估计这组数的范围,60%左右的数据落在这个范围# a.mean()+2*a.std()和a.mean()-2*a.std()  90%左右的数据落在这个范围print(a.min())     # 获取最小值print(a.max())     # 获取最大值print(a.argmax())  # 获取最大值索引print(a.argmin())  # 获取最小值索引

结果为:

454.52.87228132326901438.250990

9. numpy生成随机数

import randomprint(random.random())   # 生成0-1的随机数print(np.random.randint(0, 10))   # np.random.randint(a, b)  生成[a,b]之间的随机数# np.random.randint(a, b, c)  生成c个[a,b]之间的随机数# np.random.randint(a, b, (c, d))  生成c行d列的[a,b]之间的随机数a = np.random.randint(0, 10, 5)print(random.choice(a))  # 在a中随机选择一个数print(np.random.rand(10))  # 随机生成10个0-1的数print(np.random.choice(a, 10))  # 从a中随机出10个数print(np.random.uniform(1, 10, 7))  # np.random.uniform出现的每一个小数的概率相同# np.random.uniform(a, b, c)   # 随机生成c个[a, b]的小数

结果为:

0.737445577292010795[0.53554948 0.74975394 0.02349303 0.39619196 0.72419649 0.39722265 0.50524038 0.89804028 0.77669783 0.59872178][5 4 8 8 5 4 4 4 5 4][6.58919545 9.72106818 9.5223332  6.94093535 8.33363967 4.01829591 9.21466905]

转载地址:http://vfiwi.baihongyu.com/

你可能感兴趣的文章
JQuery中$.ajax()方法参数详…
查看>>
JS 简易滚动条
查看>>
PHP __call()方法
查看>>
JS中的call()和apply()方法
查看>>
慎用PHP$_REQUEST数组
查看>>
详细解释PHP中header
查看>>
php中的迭代器Iterator的具体用法
查看>>
mysql操作技巧随笔--链表删除数据
查看>>
MySql在建立索引优化时需要…
查看>>
Mysql建表和索引使用规范
查看>>
mysql 队列 实现并发读
查看>>
MYSQL千万级数据量的优化方法积累
查看>>
经典分享MySQL的limit查询优化
查看>>
各大浏览器兼容性报告
查看>>
统计每个ip的访问量--linux--acces…
查看>>
常见hash算法的原理
查看>>
localForage——轻松实现 Web&n…
查看>>
yaf使用小记
查看>>
document.domain 跨域问题
查看>>
window安装PHP的redis扩展
查看>>