Python数据分析之Numpy入门
2021-02-17 21:18
标签:四舍五入 app htm 管理 知识 array image column type 判断一个数组是几维,主要是看它有几个轴 一维数组一个轴: 二维数组两个轴: 三维数组三个轴: 以此类推n维数组 数组维度即代表轴的数量,可以通过数组 数组 通过 数组的 传入整数或者元组形式的参数 重点是对多维数组的索引和切片操作 多维数组有多个轴,那么就需要对每个轴进行索引。 如果取 利用数组对象的 说道迭代,最容易想到的是对数组使用 级联是指将两个或多个 以上就是个人学习数据分析相关的 Python数据分析之Numpy入门 标签:四舍五入 app htm 管理 知识 array image column type 原文地址:https://www.cnblogs.com/ssgeek/p/12695196.html
1、什么是numpy
NumPy(Numerical Python)
是Python
语言中做科学计算的基础库。重在于数值计算,也是大部分Python
科学计算库的基础,多用于在大型,多维数组上执行的数值运算。numpy
具有以下三大特点
n
维数组对象API
2、安装numpy
numpy
是一个python
库,所以使用python
包管理工具pip
或者conda
都可以安装pip install numpy
或者
conda install numpy
3、n维数组对象
n
维数组ndarray
对象,是一系列同类数据的集合,可以进行索引、切片、迭代操作。axis
一个轴表示一维数组,两个轴表示二维数组,以此类推。
每个轴都代表一个一维数组。
比如说,二维数组第一个轴里的每个元素都是一个一维数组,也就是第二个轴。[1,2,3]
[[0, 1, 2],
[3, 4, 5]]
[[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]]]
4、数组创建
numpy
中常用array
函数创建数组,传入列表或元组即可
int
arr = np.array([1,2,3,4,5])
arr
# 输出
array([1, 2, 3, 4, 5])
import numpy as np
np.array(((1,2),(3,4)))
‘‘‘
输出:
array([[1, 2],
[3, 4]])
‘‘‘
arange
函数创建一维数字数组,用法类似python
的range
函数import numpy as np
np.arange(1,6)
‘‘‘
输出:array([1, 2, 3, 4, 5])
‘‘‘
numpy
的random
模块用来创建随机数组random.rand
函数,生成[0,1)
均匀分布的随机数组import numpy as np
# 创建2行2列取值范围为[0,1)的数组
np.random.rand(2,2)
‘‘‘
输出:
array([[0.99449146, 0.92339551],
[0.1837405 , 0.41719798]])
‘‘‘
random.randn
函数,生成数值成标准正态分布(平均值为0,标准差为1)的数组import numpy as np
# 创建2行3列,取值范围为标准正态分布的数组
np.random.randn(3,2)
‘‘‘
输出:
array([[-1.27481003, -1.5888111 ],
[ 0.16985203, -2.91526479],
[ 1.75992671, -2.81304831]])
‘‘‘
random.randint
函数,生成可以指定范围的随机整数数组import numpy as np
# 创建2行2列,取值范围为[2,10)的随机整数数组
np.random.randint(2,10,size=(2,2))
‘‘‘
输出:
array([[5, 4],
[3, 7]])
‘‘‘
random.normal
函数,生成数值成正态分布(可指定平均值、标准差)的数组import numpy as np
# 创建一维,数值成正态分布(均值为1,标准差为2)的数组
# 参数loc代表均值,scale代表标准差
np.random.normal(loc=1,scale=2,size=5)
‘‘‘
输出:
array([ 0.82962241, 0.41738042, 0.0470862 , 1.79446076, -1.47514478])
‘‘‘
random
模块的其他函数
函数
说明
seed
确定随机数生成器的种子,固定生成的随机数
permutation
返回一个序列的随机排列或返回一个随机排列的范围
shuffle
对一个序列就地随机排列
rand
产生均匀分布的样本值
randint
从给定的上下限范围内随机选取整数
randn
产生正态分布(平均值为0,标准差为1)的样本值,类似于MATLAB接口
binomial
产生二项分布的样本值
normal
产生正态(高斯)分布的样本值
beta
产生Beta分布的样本值
5、数组维度
ndarray
对象的ndim
或shape
属性,来查看轴的数量
ndim
属性直接返回维度值shape
属性返回一个元组,元组的长度即代表维度值,里面的数字从左往右分别代表每一轴的元素数量import numpy as np
# 创建一维数组
x1 = np.array([1,2,3])
# 返回维度值
x1.ndim
‘‘‘
输出:1
‘‘‘
# 创建二维数组
x2 = np.array([[1,2,3],[4,5,6]])
# 返回形状
x2.shape
‘‘‘
输出:(2, 3)
元素长度为2代表二维,
元素2代表0轴有两个元素,
元素3代表1轴有3个元素。
‘‘‘
6、数组元素个数
ndarray
对象的size
属性可以查看数组包含元素总数import numpy as np
# 创建二维数组
x2 = np.array([[1,2,3],[4,5,6]])
# 查看元素总数
x2.size
‘‘‘
输出:6
‘‘‘
shape
属性返回元素的乘积,来计算数组元素数量import numpy as np
from functools import reduce
# 创建二维数组
x2 = np.array([[1,2,3],[4,5,6]])
# 查看元素总数
reduce(lambda x,y:x*y , x2.shape)
‘‘‘
输出:6
shape形状:
(2,3)
‘‘‘
7、数组元素数据类型
numpy
支持的数据类型非常多,所以很适合做数值计算,常见的数据类型如下
来源:https://www.runoob.com/numpy/numpy-dtype.html
名称
描述
bool_
布尔型数据类型(True 或者 False)
int_
默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc
与 C 的 int 类型一样,一般是 int32 或 int 64
intp
用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8
字节(-128 to 127)
int16
整数(-32768 to 32767)
int32
整数(-2147483648 to 2147483647)
int64
整数(-9223372036854775808 to 9223372036854775807)
uint8
无符号整数(0 to 255)
uint16
无符号整数(0 to 65535)
uint32
无符号整数(0 to 4294967295)
uint64
无符号整数(0 to 18446744073709551615)
float_
float64 类型的简写
float16
半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32
单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64
双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_
complex128 类型的简写,即 128 位复数
complex64
复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128
复数,表示双 64 位浮点数(实数部分和虚数部分)
numpy
数组ndarrry
对象提供dtype
属性,用来查看数组类型import numpy as np
# 创建二维数组
x2 = np.array([[1,2,3],[4,5,6]],dtype=int)
# 返回类型
x2.dtype
‘‘‘
输出:dtype(‘int32‘)
‘‘‘
8、改变数组形状
shape
属性返回一个元组,能够反映数组的形状,包括维度以及每个轴的元素数量
对于改变数组形状的常用方式有两种
reshape
方法,它返回一个新的数组,而不能改变原始数组
传入的参数和shape
属性返回的元组的含义是一样的。例如, x2.reshape(1,2,3)
是将二维数组转换成三维数组,参数个数代表要转换的维度,参数数字从左到右分别表示0
轴、1
轴、2
轴的元素数量import numpy as np
# 创建二维数组
x2 = np.array([[1,2,3],[4,5,6]])
# 将x2转换为三维数组,并且自定义每个轴的元素数量
x2.reshape(1,2,3)
‘‘‘
输出:
array([[[1, 2, 3],
[4, 5, 6]]])
‘‘‘
resize
方法,和reshape
方法使用形式一样,区别是resize
方法改变了原始数组形状import numpy as np
# 创建二维数组
x2 = np.array([[1,2,3],[4,5,6]])
# 将x2转换为三维数组,并且自定义每个轴的元素数量
x2.resize((1,2,3))
x2
‘‘‘
输出:
array([[[1, 2, 3],
[4, 5, 6]]])
‘‘‘
9、数组索引和切片操作
numpy
一维数组的索引和切片操作类似python
列表
例如取一维数组前三个元素import numpy as np
# 创建一维数组
x1 = np.array([1,2,3,4])
# 切片,取前三个元素
x1[:3]
‘‘‘
输出:
array([1, 2, 3])
‘‘‘
例如,三维数组形状为(x,y,z)
,分别代表:0
轴有x
个元素、1
轴有y
个元素,2
轴有z
个元素。
对0
、1
、2
轴进行索引,如果取o
轴第2
个元素、1
轴第0
个元素、2
轴第3
个元素,那么索引形式就为[2,0,3]
import numpy as np
# 创建三维数组
x3 = np.arange(24).reshape(3,2,4)
# 对该三维数组进行索引
x3[2,0,3]
‘‘‘
输出:19
三维数组形式:
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]]])
‘‘‘
o
轴前2
个元素、1
轴前1
个元素、2
轴后2
个元素,那么切片形式就为[:2,:1,-2:]
import numpy as np
# 创建三维数组
x3 = np.arange(24).reshape(3,2,4)
# 对该三维数组进行切片
x3[:2,:1,-2:]
‘‘‘
输出:
array([[[ 2, 3]],
[[10, 11]]])
三维数组形式:
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]]])
‘‘‘
import numpy as np
# 创建二维数组
arr = np.random.randint(0,100,size=(5,7))
# 对该数组进行数据反转
arr[::-1,::-1]
‘‘‘
输出
array([[42, 49, 71, 20, 38, 94, 47],
[47, 73, 6, 39, 60, 94, 93],
[94, 2, 5, 18, 4, 18, 78],
[25, 85, 38, 39, 20, 1, 84],
[86, 28, 9, 80, 69, 9, 3]])
二维数组形式:
array([[ 3, 9, 69, 80, 9, 28, 86],
[84, 1, 20, 39, 38, 85, 25],
[78, 18, 4, 18, 5, 2, 94],
[93, 94, 60, 39, 6, 73, 47],
[47, 94, 38, 20, 71, 49, 42]])
‘‘‘
10、数组转换与元素迭代
ravel
方法,可将多维数组展开为一维数组import numpy as np
# 创建数组
x3 = np.arange(12).reshape(3,4)
# 对该数组进行索引
x3.ravel()
‘‘‘
输出:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
‘‘‘
for
循环进行迭代,其次是使用迭代器for
循环对于一维数组是可以的,对于多维数组,迭代时相对于0轴完成的
如果使用嵌套循环,固然可以,然而太低效
此时使用flat
方法可以将多维数组平铺为一维的迭代器import numpy as np
# 创建二维数组
x2 = np.array([[1,2,3],[4,5,6]])
# 先平铺,再迭代
for i in x2.flat:
print(i)
‘‘‘
输出:
1
2
3
4
5
6
‘‘‘
11、数组级联操作
numpy
数组进行横向或者纵向的拼接
拼接时有参数axis
,值为0
表示按列操作(竖直方向),值为1
时表示按行操作(水平方向)import numpy as np
# 创建两个二维数组
x1 = np.array([[1,2,3],[4,5,6]])
x2 = np.array([[7,8,9],[10,11,12]])
# 连接,默认沿0轴连接
np.concatenate((x1,x2))
‘‘‘
输出:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
‘‘‘
# 指定沿1轴连接
np.concatenate((x1,x2),axis=1)
‘‘‘
输出:
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 10, 11, 12]])
‘‘‘
12、数组数值舍入
around
函数,用于四舍五入,返回一个新数组import numpy as np
# 创建一维数组
x1 = np.array([1.45,2.78,3.12])
# 四舍五入,到小数点后1位
np.around(x1,1)
‘‘‘
输出:
array([1.4, 2.8, 3.1])
‘‘‘
floor
函数,用于向下取整,返回一个新数组import numpy as np
# 创建一维数组
x1 = np.array([1.45,2.78,3.12])
# 向下取整
np.floor(x1)
‘‘‘
输出:
array([1., 2., 3.])
‘‘‘
ceil
函数,用于向上取整,返回一个新数组import numpy as np
# 创建一维数组
x1 = np.array([1.45,2.78,3.12])
# 向下取整
np.ceil(x1)
‘‘‘
输出:
array([2., 3., 4.])
‘‘‘
13、数组数值添加
append
函数向数组末尾追加值,可以指定不同的轴import numpy as np
# 创建一个二维数组
x1 = np.array([[1,2,3],[4,5,6]])
# 直接向数组末尾添加元素,返回平铺的一维数组
np.append(x1,[7,8,9])
‘‘‘
输出:
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
‘‘‘
# 沿轴 0 添加元素
np.append(x1, [[7,8,9]],axis = 0)
‘‘‘
输出:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
‘‘‘
# 沿轴 1 添加元素
np.append(x1, [[5,5,5],[7,8,9]],axis = 1)
‘‘‘
输出:
array([[1, 2, 3, 5, 5, 5],
[4, 5, 6, 7, 8, 9]])
‘‘‘
insert
函数可以沿给定轴,在数组中任意位置插入数据import numpy as np
# 创建一个二维数组
x1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
# 直接在指定位置插入元素,返回平铺的一维数组
np.insert(x1,2,[0,0,0])
‘‘‘
输出:
array([1, 2, 0, 0, 0, 3, 4, 5, 6, 7, 8, 9])
原数组:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
‘‘‘
# 指定位置,沿轴 0 插入元素
np.insert(x1,1,[0,0,0],axis=0)
‘‘‘
输出:
array([[1, 2, 3],
[0, 0, 0],
[4, 5, 6],
[7, 8, 9]])
‘‘‘
# 指定位置,沿轴 1插入元素
np.insert(x1,2,[0,0,0],axis=1)
‘‘‘
输出:
array([[1, 2, 0, 3],
[4, 5, 0, 6],
[7, 8, 0, 9]])
‘‘‘
14、数组元素去重
unique
函数用于去除数组中的重复元素,返回一个新数组unique
函数还能返回重复元素的索引、计数等信息import numpy as np
# 创建一个一维数组
x1 = np.array([2,3,5,1,3,8,1,0])
np.unique(x1)
‘‘‘
输出:
array([0, 1, 2, 3, 5, 8])
‘‘‘
15、常用数学函数
numpy
提供了标准的三角函数:sin()
、cos()
、tan()
numpy.around(a,decimals)
函数返回指定数字的四舍五入值
a
:数组decimails
:舍入的小数位数,默认值为0
,如果为负,整数将四舍五入到小数点左侧的位置import numpy as np
# 创建一个一维数组
arr = np.random.randint(0,100,size=(3,4))
np.sin(arr)
np.around(arr,decimals=-1)
‘‘‘
输出:
array([[-0.24525199, -0.44411267, -0.8462204 , -0.28790332],
[-0.62988799, 0.10598751, 0.99060736, -0.99388865],
[-0.7391807 , -0.40403765, -0.91652155, 0.89399666]])
array([[90, 80, 20, 20],
[80, 90, 10, 80],
[60, 30, 40, 90]])
‘‘‘
16、常用统计函数
numpy.amin()
和numpy.amax()
,用于计算数组中的元素沿指定轴的最小,最大值numpy.ptp()
:计算数组中元素最大值与最小值的差(最大值-最小值)numpy.median()
函数用于计算数组a
中元素的中位数(中值)std()
:标准差是一组数据平均值分散程度的一种度量
var()
:统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即mean((x - x.mean())**2)。换句话说,标准差是方差的平方根import numpy as np
a = np.array([22,33,21,34,41,44])
a.std()
a.var()
‘‘‘
输出:
8.65544144839919
74.91666666666667
‘‘‘
17、矩阵运算
numpy中
包含了一个矩阵库numpy.matlib
,该模块中的函数返回的是一个矩阵,而不是ndarray
对象。一个的矩阵是一个由行(row)列(column)元素排列成的矩形阵列numpy.matlib.identity()
函数返回给定大小的单位矩阵。单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)的元素均为1,除此以外全都为0.ST
import numpy as np
# 创建二维数组
x1 = np.arange(12).reshape(3,4)
# 转置
x1.T
‘‘‘
输出:
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
原数组:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
‘‘‘
numpy.dot(a, b, out=None)
a
: ndarray
数组b
: ndarray
数组import numpy as np
# 创建二维数组
a1 = np.array([[2,1],[4,3]])
a2 = np.array([[1,2],[1,0]])
np.dot(a1,a2)
‘‘‘
输出:
array([[3, 4],
[7, 8]])
‘‘‘
numpy
入门及常用知识,欢迎来骚扰O(∩_∩)O
文章标题:Python数据分析之Numpy入门
文章链接:http://soscw.com/index.php/essay/56741.html