一、简介

Numpy是高性能科学计算和数据分析的基础包。它也是pandas等其他数据分析的工具的基础,基本所有数据分析的包都用过它。NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。

安装方法:

pip install numpy

在jupyter中:需要加!,!pip3 install numpy

引用方式:

import numpy as np

这是官方认证的导入方式,可能会有人说为什么不用from numpy import *,是因为在numpy当中有一些方法与Python中自带的一些方法,例如maxmin等冲突,为了避免这些麻烦大家就约定俗成的都使用这种方法。

二、ndarray -多维数组对象

Numpy的核心特征就是N-维数组对——ndarray.

1、为什么要是用ndarray?

接下来我们可以通过具体的实例来展示一下ndarray的优势。

现在有这样一个需求:

已知若干家跨国公司的市值(美元),将其换算为人民币

按照Python当中的方法

第一种:是将所有的美元通过for循环依次迭代出来,然后用每个公司的市值乘以汇率

第二种:通过map方法和lambda函数映射

这些方法相对来说也挺好用的,但是再来看通过ndarray对象是如何计算的

通过ndarray这个多维数组对象可以让这些批量计算变得更加简单,当然这只它其中一种优势,接下来就通过具体的操作来发现。

2、创建ndarray对象

import numpy as np
np.array()

3、ndarray多维数组创建

接下来就多维数组举个例子:

有的人可能会说了,这个数组跟Python中的列表很像啊,它和列表有什么区别呢?

  • 数组对象内的元素类型必须相同
  • 数组大小不可修改

4、常用属性

属性 描述
T 数组的转置(对高维数组而言)
dtype 数组元素的数据类型
size 数组元素的个数
ndim 数组的维数
shape 数组的维度大小(以元组形式)
T:转置
就相当于是将行变成列,列变成行,它也是一个比较常用的方法

5、数据类型

  • dtype
类型 描述
布尔型 bool_
整型 int_ int8 int16 int32 int 64
无符号整型 uint8 uint16 uint32 uint64
浮点型 float_ float16 float32 float64
复数型 complex_ complex64 complex128
整型:
int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数 无符号整型:
只能用来存正数,不能用来存负数 补充:
astype()方法可以修改数组的数据类型

6、ndarray 数组创建

方法 描述
array() 将列表转换为数组,可选择显式指定dtype
arange() range的numpy版,支持浮点数
linspace() 类似arange(),第三个参数为数组长度
zeros() 根据指定形状和dtype创建全0数组
ones() 根据指定形状和dtype创建全1数组
empty() 根据指定形状和dtype创建空数组(随机值)
eye() 根据指定边长和dtype创建单位矩阵
# 1、arange()使用:
>>> np.arange(3)
array([0, 1, 2])
>>> np.arange(3.0)
array([ 0., 1., 2.])
>>> np.arange(3,7)
array([3, 4, 5, 6])
>>> np.arange(3,7,2)
array([3, 5]) -----------------------------------------------------------------
# 2、linspace()的使用
#解释:在1-10之间等比生成5个数,默认顾头顾尾。endpoint=False顾头不顾尾
# 每个数字之间的距离相等的,前后两个数做减法肯定相等
np.linspace(1,10,5)
执行结果:
array([ 1. , 3.25, 5.5 , 7.75, 10. ]) np.linspace(1,10,5,endpoint=False)
执行结果:
array([1. , 2.8, 4.6, 6.4, 8.2]) ----------------------------------------------------------------
# 3、zeros() # 创建全0数组占位
>>> np.zeros(5)
array([ 0., 0., 0., 0., 0.]) >>> np.zeros((5,), dtype=int)
array([0, 0, 0, 0, 0]) >>> np.zeros((2, 1))
array([[ 0.],
[ 0.]]) >>> s = (2,2)
>>> np.zeros(s)
array([[ 0., 0.],
[ 0., 0.]]) ---------------------------------------------------------------------
# 4、ones() # 厨房间全为1的数组占位
>>> np.ones(5)
array([1., 1., 1., 1., 1.]) >>> np.ones((5,), dtype=int)
array([1, 1, 1, 1, 1]) >>> np.ones((2, 1))
array([[1.],
[1.]]) >>> s = (2,2)
>>> np.ones(s)
array([[1., 1.],
[1., 1.]])
------------------------------------------------------------------------
# 5、empty()
np.empty(10)
执行结果:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
# 这个方法只申请内存,不给它赋值
-----------------------------------------------------------------------
# 6、eye() # 生成对称矩阵 k控制向右偏移量
np.eye(5)
执行结果:
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
>>> np.eye(2, dtype=int)
array([[1, 0],
[0, 1]]) >>> np.eye(5,k=2)
array([[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])

7、数组运算和转换

数组和标量(数字)之间运算

arr = np.array([1,2,3,4,5,6])
arr*2
# 执行结果:
array([ 2, 4, 6, 8, 10, 12]) -----------------------------------------------------------------------
arr = np.array([1,2,3,4,5,6])
arr1 = np.array([11,22,33,44,55,66])
arr*arr1
# 执行结果:
array([ 11, 44, 99, 176, 275, 396]) arr+arr1
# 执行结果:
array([12, 24, 36, 48, 60, 72])

一维数组与多维数组之间的转换

# 一维数组-->多维数组
res1 = np.arange(30).reshape(5,-1) # -1无任何作用,占位。系统自动算出几列
res1
array([[ 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]]) # 多维数组-->一维数组
res2 = res1.reshape(30)
res2
array([ 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])

8、索引和切片

索引取值

# 多维数组索引使用方法
array([[ 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]])
现在有这样一组数据,需求:找到20
列表写法:arr[3][2]
数组写法:arr[3,2] # 中间通过逗号隔开就可以了 # 一维数组索引使用
array([1, 2, 3, 4, 5, 6])
arr[0] # 1
arr[2] # 3 # 花式索引,列表里放索引。需要提前知道索引
array([1, 2, 3, 4, 5, 6])
arr[[0,3]] # array([1, 4])

切片

# 一维数组切片:和python一至
array([1, 2, 3, 4, 5, 6])
arr[0:2] # array([1, 2]
arr[::-1] # array([6, 5, 4, 3, 2, 1])
arr[::2] # array([1, 3, 5]) # 多维数组切片:arr[行:列]
arr数组
array([[ 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]])
arr[1:4,1:4] # 切片方式
执行结果:
array([[ 7, 8, 9],
[13, 14, 15],
[19, 20, 21]])

布尔型索引

现在有这样一个需求:给一个数组,选出数组种所有大于5的数。

array([1, 2, 3, 4, 5, 6])

arr > 4
array([False, False, False, True, True, True]) 取值:
arr[arr>3]
array([4, 5, 6])

三、通用函数

能对数组中所有元素同时进行运算的函数就是通用函数

常见通用函数:

能够接受一个数组的叫做一元函数,接受两个数组的叫二元函数,结果返回的也是一个数组

1、一元函数

函数 功能
abs、fabs 分别是计算整数和浮点数的绝对值
sqrt 计算各元素的平方根
square 计算各元素的平方
exp 计算各元素的指数e**x
log 计算自然对数
sign 计算各元素的正负号
ceil 计算各元素的ceiling值
floor 计算各元素floor值,即小于等于该值的最大整数
rint 计算各元素的值四舍五入到最接近的整数,保留dtype
modf 将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似
isnan 计算各元素的正负号
isinf 表示那些元素是无穷的布尔型数组
cos,sin,tan 普通型和双曲型三角函数

2、二元函数

函数 功能
add 将数组中对应的元素相加
subtract 从第一个数组中减去第二个数组中的元素
multiply 数组元素相乘
divide、floor_divide 除法或向下圆整除法(舍弃余数)
power 对第一个数组中的元素A,根据第二个数组中的相应元素B计算A**B
maximum,fmax 计算最大值,fmax忽略NAN
miximum,fmix 计算最小值,fmin忽略NAN
mod 元素的求模计算(除法的余数)

补充内容:浮点数特殊值

浮点数:float

浮点数有两个特殊值:

1、nan(Not a Number):不等于任何浮点数(nan != nan)
---------------------------------------------
2、inf(infinity):比任何浮点数都大
---------------------------------------------
  • Numpy中创建特殊值:np.nan、np.inf
  • 数据分析中,nan常被用作表示数据缺失值

3、数学统计方法

函数 功能
sum 求和
cumsum 求前缀和
mean 求平均数
std 求标准差
var 求方差
min 求最小值
max 求最大值
argmin 求最小值索引
argmax 求最大值索引

4、随机数

随机数生成函数在np.random的子包当中

常用函数

函数 功能
np.random.rand 给定形状产生随机数组(0到1之间的数)
np.random.randint 给定形状产生随机整数
np.random.choice 给定形状产生随机选择
np.random.shuffle 与random.shuffle相同
np.random.uniform 给定形状产生随机数组

数据分析之上篇---numpy模块的更多相关文章

  1. 数据分析01 /numpy模块

    数据分析01 /数据分析之numpy模块 目录 数据分析01 /数据分析之numpy模块 1. numpy简介 2. numpy的创建 3. numpy的方法 4. numpy的常用属性 5. num ...

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

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

  3. 开发技术--Numpy模块

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

  4. Python使用pip安装Numpy模块

    安装Numpy模块一般有两种安装方法: 一:下载模块对应的.exe文件,直接双击运行安装 二:下载模块对应的.whl文件,使用pip安装 对于exe文件的安装比较简单,都是双击运行,这里就不说了. 这 ...

  5. numpy模块常用函数解析

    https://blog.csdn.net/lm_is_dc/article/details/81098805 numpy模块以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter note ...

  6. numpy模块、matplotlib模块、pandas模块

    目录 1. numpy模块 2. matplotlib模块 3. pandas模块 1. numpy模块 numpy模块的作用 用来做数据分析,对numpy数组(既有行又有列)--矩阵进行科学计算 实 ...

  7. pandas、matplotlib、Numpy模块的简单学习

    目录 一.pandas模块 二.matplotlib模块 1.条形图 2. 直方图 3.折线图 4.散点图+直线图 三.numpy 一.pandas模块 pandas是BSD许可的开源库,为Pytho ...

  8. Python之路-numpy模块

    这里是首先需要安装好Anaconda Anaconda的安装参考Python之路-初识python及环境搭建并测试 配置好环境之后开始使用Jupyter Notebook 1.打开cmd,输入 jup ...

  9. numpy模块(详解)

    重点 索引和切片 级联 聚合操作 统计操作 矩阵 什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律 数据分析是用适当的方法对收集来的大量数据进行分析,帮助 ...

随机推荐

  1. WiFi产生电磁辐射或让人想去自杀

    随着互联网在生活中的地位越来越重要,WiFi作为一种无线连接方式给了用户极大的便捷,然而有一部分科学家提出WiFi产生的电磁反应会对人的健康受到影响.面对这种说法,我们一直以为是专家在危言耸听,但是如 ...

  2. celery beat之pidfile already exists问题

    背景 在进行celery定时任务测试时,发现到点任务并未执行,检查了log发现在启动celery beat的时候有这样一个报错,所以celery beat并未启动成功. 1234 (hzinfo) E ...

  3. string类应用举例

    * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhello ...

  4. Dart 运行速度测评与比较

    引言 Dart 是一门优秀的跨平台语言,尽管生态方面略有欠缺,但无疑作为一门编程语言来说,Dart 是很优美,很健壮的,同时也引入了一些先进的编程范式,值得去学习. 测试内容 现在,我们就来测评一下D ...

  5. jquery-购物车js

    购物车示例js,为了方便参考,页面写的比较简单.示例如下图所示: html代码如下: <!doctype html> <html lang="en"> &l ...

  6. 关于IT培训机构的个人看法

    1.前言 缘分与巧合,最近接触比较多的培训机构出来的人,以及看过关于培训机构的文章和问答.虽然没在培训机构上过课,但是接触过很多培训机构出来的人,也看过一些培训机构的课程.关于培训机构,我也有自己的看 ...

  7. 【JavaScript】DOM之Document对象

    JS(JavaScript) 一.Document对象 1.Document对象是什么 Document对象 是DOM的基本规范也是重要的对象之一,以访问,更新页面内容的属性和方法通过conslie. ...

  8. bp(net core)+easyui+efcore实现仓储管理系统——入库管理之三存储过程(三十九)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  9. SpringBoot1.5.10.RELEASE配置mybatis的逆向工程

    在application.properties配置扫描等,不做多说 1.在pom配置文件中引入mybatis和mysql的依赖,如下: <dependency> <groupId&g ...

  10. 第二章、 Vue 起步

    2-2.编写hello world 首先创建vue实例,然后实例接收一些配置项,el表示实例负责管理的区域,data表示区域内的数据 两秒后内容变为bye world 其中app表示实例对象,$dat ...