• 数据分析三剑客:

    Numpy, Pandas, Matplotlib

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

一、 使用np.array()创建

  • 一维数据创建

  1. import numpy as np
  2. arr_1 = np.array([1,2,3,4,5])
  3. arr_1
  • 二维数组创建
  1. np.array([[1,2.2,3],[4,5,6]])

注意:

  • numpy默认ndarray的所有元素的类型是相同的

  • 如果传进来的列表中包含不同的类型,则统一为同一类型,

  • 优先级:str>float>int

  • 使用matplotlib.pyplot获取一个numpy数组,数据来源于一张图片

  1. import matplotlib.pyplot as plt
  2. img_arr = plt.imread('./bobo.jpg')
  3. img_arr
  4. # 显示图片
  5. plt.imshow(img_arr)
  6. # 修改 操作该numpy数据,该操作会同步到图片中
  7. img_arr = img_arr - 100
  8. # 查看数组的 维度
  9. img_arr.shape
  10. (626, 413, 3)

使用np的routines函数创建

  1. 包含以下常见创建方法:
  2. # 创建全是 1 的二位数组 5 行 6 列
  3. np.ones(shape=(5,6),dtype=int)
  4. # 全是 0 的
  5. np.zeros(shape, dtype=None, order='C')
  6. # 指定 全是 999 的二位数组 np.full(shape, fill_value, dtype=None, order='C')
  7. np.full((5,5),fill_value=999)
  8. # np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差数列
  9. np.linspace(1,100,num=50)
  10. #
  11. # np.arange([start, ]stop, [step, ]dtype=None)
  12. np.arange(0,100,2)
  13. # 创建都是整数的 随机数
  14. # np.random.randint(low, high=None, size=None, dtype='l')
  15. np.random.seed(4) #固定随机性
  16. np.random.randint(0,100,size=(5,6))
  17. # np.random.randn(d0, d1, ..., dn) 标准正太分布
  18. np.random.randn(4,5,6)
  19. # np.random.random(size=None) 生成0到1的随机数
  20. np.random.random(size=(3,3))

二、ndarray的属性

  • 4个必记参数:

    • ndim:维度
    • shape:形状(各维度的长度)
    • size:总长度
    • dtype:元素类型
  1. img_arr.size
  2. # 775614
  3. img_arr.dtype
  4. # dtype('uint8')
  5. type(img_arr)
  6. # numpy.ndarray
  7. img_arr.ndim
  8. # 3

三、ndarray的基本操作

1. 索引

一维与列表完全一致 多维时同理

  1. np.random.seed(1)
  2. arr = np.random.randint(0,100,size=(5,5))
  3. arr
  4. # 根据索引修改数据
  5. arr[1][2]

2. 切片

一维与列表完全一致 多维时同理

  1. arr[0:2] #获取二维数组前两行
  2. arr[:,0:2] #逗号左边是 行 右边是 #获取二维数组前两行列
  3. #获取二维数组前两行和前两列数据
  4. arr[0:2,0:2]
  5. # 将数据反转,例如[1,2,3]---->[3,2,1]
  6. #将数组的行倒序
  7. arr[::-1]
  8. #列倒序
  9. arr[:,::-1]
  10. #全部倒序
  11. arr[::-1,::-1]
  12. #将图片进行全倒置操作
  13. plt.imshow(img_arr[:,::-1,:])
  14. plt.imshow(img_arr[::-1,::-1,::-1])

3. 变形

使用arr.reshape()函数,注意参数是一个tuple!

  • 基本使用

    1.将一维数组变形成多维数组

  1. # 变成二维数组
  2. arr_1.reshape((-1,5))
  3. # 2.将多维数组变形成一维数组
  4. arr_1 = arr.reshape((25,))
  5. # 图片倒置
  6. plt.imshow(img_arr.reshape((-1,))[::-1].reshape((626,413,3)))

4. 级联

  • np.concatenate()

1.一维,二维,多维数组的级联,实际操作中级联多为二维数组

  1. # 3 个二维数组连接起来 横向
  2. np.concatenate((arr,arr,arr),axis=1)
  3. # 将两个二维数组 连接 纵向
  4. np.concatenate((arr,arr1),axis=0)
  5. # .合并两张照片
  6. img_arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1)
  7. img_arr_9 = np.concatenate((img_arr_3,img_arr_3,img_arr_3),axis=0)
  8. plt.imshow(img_arr_9)
  • np.hstack与np.vstack

  1. # 横向合并
  2. np.vstack((arr,arr))
  3. # 纵向合并
  4. np.hstack((arr,arr))
  • 级联需要注意的点:

    • 级联的参数是列表:一定要加中括号或小括号
    • 维度必须相同
    • 形状相符:在维度保持一致的前提下,如果进行横向(axis=1)级联,必须保证进行级联的数组行数保持一致。如果进行纵向(axis=0)级联,必须保证进行级联的数组列数保持一致。
    • 可通过axis参数改变级联的方向

5. 切分

  • 与级联类似,三个函数完成切分工作:

    • np.split(arr,行/列号,轴):参数2是一个列表类型
    • np.vsplit
    • np.hsplit
  1. # 按0 轴向的 400 切割 取第 0 个
  2. plt.imshow(np.split(img_arr,[400],axis=0)[0])\
  3. # 根据 切片切割 行 切 60-400 列切 100-300 颜色不动
  4. plt.imshow(img_arr[60:400,100:330,:])

6. 副本

  • 所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象的操作也对原来的对象生效。

  • 可使用copy()函数创建副本

    1. a = arr.copy()
    2. a[2][2] = 666
    3. arr
    4. # 原 数组不动

四、ndarray的聚合操作

1. 求和np.sum

  1. arr.sum(axis=1) # 求 1 横向轴向的和

2. 最大最小值:np.max/ np.min

3.平均值:np.mean()

  1. arr.std(axis=0)
  2. # array([23.80420131, 35.94440151, 26.96961253, 21.81192334, 31.18589425])

3. 其他聚合操作

  1. Function Name NaN-safe Version Description
  2. np.sum np.nansum Compute sum of elements
  3. np.prod np.nanprod Compute product of elements
  4. np.mean np.nanmean Compute mean of elements
  5. np.std np.nanstd Compute standard deviation
  6. np.var np.nanvar Compute variance
  7. np.min np.nanmin Find minimum value
  8. np.max np.nanmax Find maximum value
  9. np.argmin np.nanargmin Find index of minimum value
  10. np.argmax np.nanargmax Find index of maximum value
  11. np.median np.nanmedian Compute median of elements
  12. np.percentile np.nanpercentile Compute rank-based statistics of elements
  13. np.any N/A Evaluate whether any elements are true
  14. np.all N/A Evaluate whether all elements are true
  15. np.power 幂运算

六、ndarray的排序

1. 快速排序

np.sort()与ndarray.sort()都可以,但有区别:

  • np.sort() 不改变输入
  • ndarray.sort() 本地处理,不占用空间,但改变输入
  1. np.sort(arr,axis=0)
  2. arr.sort(axis=0)

Numpy 模块的应用的更多相关文章

  1. Python:基本运算、基本函数(包括复数)、Math模块、NumPy模块

    基本运算 x**2 : x^2 若x是mat矩阵,那就表示x内每个元素求平方 inf:表示正无穷 逻辑运算符:and,or,not 字典的get方法 a.get(k,d) 1 1 get相当于一条if ...

  2. 【Python 数据分析】Numpy模块

    Numpy模块可以高效的处理数据,提供数组支持.很多模块都依赖他,比如:pandas.scipy.matplotlib 安装Numpy 首先到网站:https://www.lfd.uci.edu/~g ...

  3. python numpy模块

    目录 numpy模块 一维数组 二维数组(用的最多的) 获取多维数组的行和列 多维数组的索引 高级功能 多维数组的元素的替换 通过函数方法创建多维数组 矩阵的运算 点乘和转置(了解) 点乘必须 m*n ...

  4. Python及bs4、lxml、numpy模块包的安装

    http://blog.csdn.net/tiantiancsdn/article/details/51046490(转载) Python及bs4.lxml.numpy模块包的安装 Python 的安 ...

  5. numpy模块(对矩阵的处理,ndarray对象)

    6.12自我总结 一.numpy模块 import numpy as np约定俗称要把他变成np 1.模块官方文档地址 https://docs.scipy.org/doc/numpy/referen ...

  6. Python3:numpy模块中的argsort()函数

    Python3:numpy模块中的argsort()函数   argsort函数是Numpy模块中的函数: >>> import numpy >>> help(nu ...

  7. 3 numpy模块

    Numpy     什么是Numpy:Numeric Python         Numpy模块是Python的一种开源的数值计算扩展.             1 一个强大的N维数组对象Array ...

  8. Day 19 numpy 模块

    numpy 模块(多维数组) import numpy as np arr=np.array([1,2,3,4],[5,6,7,8]) print(arr) #[[1 2 3 4] #[5 6 7 8 ...

  9. Pathon中numpy模块

    目录 numpy模块 切割矩阵 矩阵元素替换 矩阵的合并 通过函数创建矩阵 fromstring/fromfunctions 矩阵的运算 常用矩阵运函数 矩阵的点乘 矩阵的逆 矩阵的其他操作 nump ...

  10. 开发技术--Numpy模块

    开发|Numpy模块 Numpy模块是数据分析基础包,所以还是很重要的,耐心去体会Numpy这个工具可以做什么,我将从源码与 地产呢个实现方式说起,祝大家阅读愉快! Numpy模块提供了两个重要对象: ...

随机推荐

  1. Mac包管理神器Homebrew

    概念 简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,相当于Red hat的yum.Ubuntu的apt-get. 安装命令 ruby -e "$( ...

  2. Java垃圾回收器的工作原理

    上课,老师照本宣科,实在难以理解,干脆就看书包里的Java书,正好看了Java的垃圾回收器是如何工作的,觉得有必要记录一下. 参考于 Java编程思想第四版(Thinking in Java) 老年代 ...

  3. HTML5效果:实现树叶飘落

    实现如图所示的东西效果(落叶下落): html代码: <!DOCTYPE html> <html> <head> <title>HTML5树叶飘落动画& ...

  4. ThinkPHP框架知识

    php框架 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格 ...

  5. JMeter 线程组之ConcurrencyThreadGroup介绍

    线程组之ConcurrencyThreadGroup by:授客 QQ:1033553122 测试环境 apache-jmeter-3.2 jmeter-plugins-manager-1.3.jar ...

  6. MySQL 性能优化-数据库死锁监控

    MySQL性能优化-数据库死锁监控 by:授客 QQ:1033553122 1)表锁定 通过检查 table_locks_waited 和 table_locks_immediate 状态变量来分析表 ...

  7. F5负载的应用IIS日志记录的不是真实IP的处理方法

    如果没有这一项,在服务里添加上 将F5XForwardedFor.dll拷贝到应用目录下 添加筛选器: 名称:F5XForwardedFor 可执行文件:F5XForwardedFor.dll所在的目 ...

  8. Kotlin入门(25)共享参数模板

    共享参数SharedPreferences是Android最简单的数据存储方式,常用于存取“Key-Value”键值对数据.在使用共享参数之前,要先调用getSharedPreferences方法声明 ...

  9. [Android][Framework] 添加系统服务

    新博客地址 http://wossoneri.github.io/2018/09/15/[Android][Framework]create-system-service/ 做系统开发,有时候需要自己 ...

  10. 【效率工具】SSH一键登录脚本(可一键从跳板机登录线上服务器)

    说明 前阵子上线,一次性上了十个服务,一直上到凌晨才完事,期间每个服务都要先输入跳板机的登录信息来登录跳板机,然后再输入线上服务器的信息来登录线上服务器,实在是太过于麻烦,而且有些服务还有好几台服务器 ...