Numpy初体验
Numpy
一、简介
Numpy是高性能科学计算和数据分析的基础包。它也是pandas等其他数据分析的工具的基础,基本所有数据分析的包都用过它。
NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。
它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。
1、安装
pip install numpy
2、特殊的导包
数据分析界约定俗成的将numpy包导入命名为np
import numpy as np
二、ndarray-多维数组对象
Numpy的核心特征就是N-维数组对 —— ndarray。
1、创建ndarray数组
| 方法 | 描述 | |
|---|---|---|
| array() | 将列表转换为数组,可选择显式指定dtype | |
| arange() | range的numpy版,支持浮点数 | |
| linspace() | 类似arange(),第三个参数为数组长度 | |
| zeros() | 根据指定形状和dtype创建全0数组 | |
| ones() | 根据指定形状和dtype创建全1数组 | |
| empty() | 根据指定形状和dtype创建空数组(随机值) | |
| eye() | 根据指定边长和dtype创建单位矩阵 |
1.1 array
np.array([[a,b,c],[x,y,z],···])
列表套列表,内嵌的列表个数为维度。
# 创建一维数组
>>>:arr = np.array([1,2,5,8])
# 创建多维数组
>>>:arr = np.array([[1,2,5,8],[2,4,6,7]])
# dtype指定数组元素类型
>>>:arr3 = np.array([1,2,3,4,5,6], dtype='float')
array([1., 2., 3., 4., 5., 6.])
1.2 arange
创建间隔数为1的范围数组。
np.arange(x) 指定右端点,左端点默认为0。
np.arange(x,y) 指定左右端点。
# 创建0~5,间隔为1的数组,右闭
>>>:np.arange(5)
array([0, 1, 2, 3, 4])
# arange创建1~6,间隔为1的数组,右闭
>>>:np.arange(1,6)
array([1, 2, 3, 4, 5])
1.3 linspace
np.linspace(start,stop,num=50,endpoint=True,
retstep=False,dtype=None,axis=0,)
创建间隔数不指定为1的范围数组。
num参数用来控制范围拆分的个数,从而控制间隔数。
endpoint用来指定区间右端点闭或开。
# linspace创建指定拆分个数的数组
>>>:np.linspace(1,10,num=10)
array([1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
# linspace创建数组时,endpoint可以指定区间右闭或右开
>>>:np.linspace(1,10,num=9,endpoint=False)
array([1., 2., 3., 4., 5., 6., 7., 8., 9.])
1.4 zeros
zeros(shape, dtype=float, order='C')
创建元素全部为0的数组。
sharp用来控制数组的维度和长度(行,列)。
>>>:np.zeros((2,5))
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
1.5 ones
np.ones(shape, dtype=None, order='C')
创建元素全部为1的数组。
sharp用来控制数组的维度和长度(行,列)。
>>>:np.ones((5,3))
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
1.6 empty
empty(shape, dtype=float, order='C')
创建一个随机元素数组。
sharp用来控制数组的维度和长度(行,列)。
>>>:np.empty((3,3))
array([[2.69329361e-312, 2.61054848e+106, 9.65232955e-312],
[9.65232955e-312, 9.65232955e-312, 9.65232955e-312],
[9.65232955e-312, 6.17188958e+303, 2.71615461e-312]])
1.7 eye
np.eye(N, M=None, k=0, dtype=<class 'float'>, order='C')
创建一个2维数组,对角线上为1,其他地方为0。
N:表示行数
M:表示列数,默认与行数一样
k:对角线索引。0(默认值)为主对角线,正值为上对角线,负值为下对角线。
>>>:np.eye(3,2)
array([[1., 0.],
[0., 1.],
[0., 0.]])
>>>:np.eye(3,2,-1)
array([[0., 0.],
[1., 0.],
[0., 1.]])
2、ndarray对象的特点
这也是它和Python【列表】的不同之处。
- 数组对象内的元素类型必须相同
- 数组大小不可修改
3、ndarray的常用属性
| 属性 | 描述 | |
|---|---|---|
| T | 数组的转置(对高维数组而言) | |
| dtype | 数组元素的数据类型 | |
| size | 数组元素的个数 | |
| ndim | 数组的维数 | |
| shape | 数组的维度大小(以元组形式)(行,列) | |
| reshape | 重塑数组的形状(行,列) |
>>>:arr
array([[1, 2, 5, 8],
[2, 4, 6, 7]])
>>>:arr.T
array([[1, 2],
[2, 4],
[5, 6],
[8, 7]])
>>>:a1
array([[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]])
>>>:a1.shape
(3, 5)
arr6 = np.array([[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]])
>>>:arr6
array([[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]])
>>>:arr6.reshape(5,3)
array([[1, 2, 3],
[4, 5, 1],
[2, 3, 4],
[5, 1, 2],
[3, 4, 5]])
4、ndarray的数据类型
- dtype
| 类型 | 描述 | |
|---|---|---|
| 布尔型 | bool_ | |
| 整型 | int_ int8 int16 int32 int 64 | |
| 无符号整型 | uint8 uint16 uint32 uint64 | |
| 浮点型 | float_ float16 float32 float64 | |
| 复数型 | complex_ complex64 complex128 |
布尔型:
与Python不一样的是,bool_ 后面多了一个下划线_ 。
整型:
int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数。
无符号整型:
只能用来存正数,不能用来存负数。
补充:
astype()方法可以强制转换数组的数据类型。
5、索引和切片
5.1 一维数组
5.1.1 索引
索引和Python的列表用法一样。
>>>:arr1 = np.array([1,2,3,4])
>>>:arr1[0],arr1[1],arr1[2]
(1, 2, 3)
5.1.2 切片
切片也和Python的列表用法一样。
>>>:arr1
array([1, 2, 3, 4])
>>>:arr1[1:2]
array([2])
>>>:arr1[1:3]
array([2, 3])
>>>:arr1[1:4]
array([2, 3, 4])
5.2 二维数组
5.2.1 索引
取元素要确定行和列的位置:
数组[行,列]/数组[(行,列)]
>>>:arr2 = np.array([[1,2,3,4],[5,6,7,8]])
>>>:arr2
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
>>>:arr2[0,0],arr2[1,1]
(1, 6)
>>>:arr2[(0,0)]
1
5.2.2 切片
>>>:arr3
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]])
>>>:arr3[1:3,1:3]
array([[ 7, 8],
[13, 14]])
>>>:arr3[2:5,1:4]
array([[13, 14, 15],
[19, 20, 21],
[25, 26, 27]])
5.3 布尔型索引
将同样大小的布尔数组传进索引,会返回一个有True对应位置的元素的数组
>>>:arr3
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]])
>>>:>4
array([[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, True, True, True, True, True]])
>>>:arr3[arr3>5]
array([ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,23, 24, 25, 26, 27, 28, 29])
>>>:arr3[arr3<13]
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
5.4 花式索引
中括号中套中括号,内层中括号中写索引下标,可取多个不连续值。
>>>:n1 = np.array([1,2,3,4,5])
>>>:n1
array([1, 2, 3, 4, 5])
>>>:n1[[1,3]]
array([2, 4])
三、通用函数
能对数组中所有元素同时进行运算的函数就是通用函数。
1、常用通用函数
1.1 一元函数
| 函数 | 功能 | |
|---|---|---|
| abs、fabs | 分别是计算任意数和浮点数的绝对值 | |
| sqrt | 计算各元素的平方根 | |
| square | 计算各元素的平方 | |
| exp | 计算各元素的指数e**x | |
| log | 计算自然对数 | |
| sign | 计算各元素的正负号 | |
| ceil | 向上取整 | |
| floor | 向下取整 | |
| rint | 计算各元素的值四舍五入到最接近的整数,保留dtype | |
| modf | 将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似 | |
| isnan | 计算各元素的正负号 | |
| isinf | 表示那些元素是无穷的布尔型数组 | |
| cos,sin,tan | 普通型和双曲型三角函数 |
>>>:a = -4
>>>:np.abs(a)
4
>>>:b = -4.4423423
>>>:np.abs(b)
4.4423423
>>>:np.fabs(b)
4.4423423
>>>:np.fabs(a)
4.0
# 向上取整
>>>:np.ceil(b)
-4.0
# 向下取整
>>>:np.floor(b)
-5.0
# 四舍五入
>>>:arr4 = np.linspace(1,5,num=4)
>>>:arr4
array([1. , 2.33333333, 3.66666667, 5. ])
>>>:np.rint(arr4)
array([1., 2., 4., 5.])
# 拆分整数与小数
>>>:np.modf(4.5)
(0.5, 4.0)
>>>:np.isnan(3)
False
>>>:np.isnan(np.nan)
True
1.2 二元函数
| 函数 | 功能 | |
|---|---|---|
| add | 将数组中对应的元素相加 | |
| subtract | 从第一个数组中减去第二个数组中的元素 | |
| multiply | 数组元素相乘 | |
| divide、floor_divide | 除法或向下圆整除法(舍弃余数) | |
| power | 对第一个数组中的元素A,根据第二个数组中的相应元素B计算A**B | |
| maximum,fmax | 计算最大值,fmax忽略NAN | |
| miximum,fmix | 计算最小值,fmin忽略NAN | |
| mod | 元素的求模计算(除法的余数) |
>>>:arr1
array([1, 2, 3, 4])
>>>:arr2
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
>>>:np.add(1,2)
3
>>>:np.subtract(arr2,arr1)
array([[0, 0, 0, 0],
[4, 4, 4, 4]])
2、数学统计方法
| 函数 | 功能 | |
|---|---|---|
| sum | 求和 | |
| cumsum | 求前缀和 | |
| mean | 求平均数 | |
| std | 求标准差 | |
| var | 求方差 | |
| min | 求最小值 | |
| max | 求最大值 | |
| argmin | 求最小值索引 | |
| argmax | 求最大值索引 |
>>>:np.sum(arr1)
10
# 累加和
>>>:np.cumsum(arr2)
array([ 1, 3, 6, 10, 15, 21, 28, 36], dtype=int32)
>>>:arr5 = np.array([3,5,2,56,1,4,6])
>>>:arr5
array([ 3, 5, 2, 56, 1, 4, 6])
# 求最小值的索引
>>>:np.argmin(arr5)
4
3、随机数
有关随机数的函数在np.random的子包当中。
常用随机函数:
| 函数 | 功能 | |
|---|---|---|
| rand | 给定形状产生随机数组(0到1之间的数) | |
| randint | 给定形状产生随机整数 | |
| chocie | 给定形状产生随机选择 | |
| shuffle | 与random.shuffle相同 | |
| uniform | 给定形状产生随机数组 |
# 形状
>>>:np.random.rand(4,3)
array([[0.21599854, 0.28993531, 0.31989618],
[0.26206019, 0.69186237, 0.30819278],
[0.21106428, 0.68874875, 0.58279413],
[0.78623511, 0.80717789, 0.66939268]])
# 起始,终结,形状
>>>:np.random.randint(4,10,size=(2,3))
array([[9, 6, 8],
[4, 7, 5]])
# 随机选择
>>>:np.random.choice(4,5)
array([1, 3, 2, 0, 1])
>>>:np.random.choice([1,5,7,9],5)
array([5, 9, 1, 7, 7])
# 打乱
>>>:arr7 = np.random.choice([1,2,3,4,5,7,9],5)
>>>:arr7
array([2, 5, 4, 5, 3])
>>>:np.random.shuffle(arr7)
>>>:arr7
array([5, 3, 4, 2, 5])
Numpy初体验的更多相关文章
- Python大数据与机器学习之NumPy初体验
本文是Python大数据与机器学习系列文章中的第6篇,将介绍学习Python大数据与机器学习所必须的NumPy库. 通过本文系列文章您将能够学到的知识如下: 应用Python进行大数据与机器学习 应用 ...
- Kaggle初体验之泰坦尼特生存预测
Kaggle初体验之泰坦尼特生存预测 学习完了决策树的ID3.C4.5.CART算法,找一个试手的地方,Kaggle的练习赛泰坦尼特很不错,记录下 流程 首先注册一个账号,然后在顶部菜单栏Co ...
- CNN Mini-Fashion数据集以及Pytorch初体验
下载Fasion-MNIST数据集 Fashion-MNIST是一个替代原始的MNIST手写数字数据集的另一个图像数据集. 它是由Zalando(一家德国的时尚科技公司)旗下的研究部门提供.其涵盖了来 ...
- 深度学习之TensorFlow安装与初体验
深度学习之TensorFlow安装与初体验 学习前 搞懂一些关系和概念 首先,搞清楚一个关系:深度学习的前身是人工神经网络,深度学习只是人工智能的一种,深层次的神经网络结构就是深度学习的模型,浅层次的 ...
- pytorch入门2.2构建回归模型初体验(开始训练)
pytorch入门2.x构建回归模型系列: pytorch入门2.0构建回归模型初体验(数据生成) pytorch入门2.1构建回归模型初体验(模型构建) pytorch入门2.2构建回归模型初体验( ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
随机推荐
- 【论文研读】Sabir, Ekraam, et al. "Recurrent convolutional strategies for face manipulation detection in videos." Interfaces (GUI) 3.1 (2019).
#摘要 错误信息通过合成逼真的图像和视频进行传播这一严重问题,需要鲁棒的篡改检测方法来应对.尽管在检测静止图像上的面部篡改方面已付出了巨大的努力,但人们对于通过利用视频流中存在的时序信息,对视频中被篡 ...
- 2019牛客国庆集训派对day2
A(模拟): #include <bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; const double ...
- P3128 [USACO15DEC]最大流Max Flow (树上差分)
题目描述 Farmer John has installed a new system of N-1N−1 pipes to transport milk between the NN stalls ...
- Educational Codeforces Round 89 (Rated for Div. 2) C. Palindromic Paths(贪心)
题目链接:https://codeforces.com/contest/1366/problem/C 题意 有一个 $n \times m$ 的 $01$迷宫,要使从 $(1,1)$ 到 $(n,m) ...
- Codeforces Round #647 (Div. 2) A. Johnny and Ancient Computer
题目链接:https://codeforces.com/contest/1362/problem/A 题意 有一个正整数 $a$,可选择的操作如下: $a \times 2$ $a \times 4$ ...
- uva10859 Placing Lampposts (树形dp+求两者最小值方法)
题目链接:点击打开链接 题意:给你一个n个点m条边的无向无环图,在尽量少的节点上放灯,使得所有边都被照亮,每盏灯将照亮以它为一个端点的所有边.在灯的总数最小的前提下,被两盏灯同时照亮的边数应尽量大. ...
- Codeforces Round #602 Div2 D1. Optimal Subsequences (Easy Version)
题意:给你一个数组a,询问m次,每次返回长度为k的和最大的子序列(要求字典序最小)的pos位置上的数字. 题解:和最大的子序列很简单,排个序就行,但是题目要求字典序最小,那我们在刚开始的时候先记录每个 ...
- Codeforces Round #660 (Div. 2) C. Uncle Bogdan and Country Happiness (DFS)
题意:有\(n\)个人,每个人居住在某个节点,所有人都在节点\(1\)上班,下班后沿着最短路径回家,在回家途中心情可能会变差(心情只会变差不会变好),每个节点都有一个开心值,开心值等于所有经过时的好心 ...
- 大数据开发-Spark-初识Spark-Graph && 快速入门
1.Spark Graph简介 GraphX 是 Spark 一个组件,专门用来表示图以及进行图的并行计算.GraphX 通过重新定义了图的抽象概念来拓展了 RDD: 定向多图,其属性附加到每个顶点和 ...
- Linux程序设计——Linux基础
1. 什么是Linux 1)Linux系统是一种自由和开放源代码的类UNIX的完整操作系统. 2)林纳斯·本纳第克特·托瓦兹(LinusBenedictTorvalds,1969年~) 3)诞生于19 ...