NumPy(Numerical Python)是Python的⼀种开源的数值计算扩展。提供多维数组对象,各种派⽣对象(如掩码数组和矩阵),这种⼯具可⽤来存储和处理⼤型矩阵,⽐Python⾃身的嵌套列表(nested list structure)结构要⾼效的多(该结构也可以⽤来表示矩阵(matrix)),⽀持⼤量的维度数组与矩阵运算,此外也针对数组运算提供⼤量的数学函数库,包括数学、逻辑、形状操作、排序、选择、输⼊输出、离散傅⽴叶变换、基本线性代数,基本统计运算和随机模拟等等。
⼏乎所有从事Python⼯作的数据分析师都利⽤NumPy的强⼤功能。
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
import numpy as np
NumPy最核心的数据类型是N维数组(The N-dimensional array(ndarry))。
Numpy 数组的创建方法
np.array()
这是最基本的数组构建方法, 它的完整方法如下所示:
numpy.array(object, dtype=None, ndmin=0)
对于上面的参数,我们简单做一下解释,因为某些参数几乎用不到,所以我们只需记住常用的重要参数即可:
object,表示数组,即要生成 ndarray 数组的对象;
dtype,表示数据类型,根据给出的object自动确定;
ndmin,指定数组具有的最小维数。
示例如下所示:
In [1]: import numpy as np
In [2]: data=np.array([[1,2],[3,4]]) /data=np.array([[1,2,3,4]])
In [3]: data
Out[3]:
array([[1, 2],
[3, 4]])
python列表和Numpy数组的区别
列表list与数组array的定义:
列表是由一系列按特定顺序排列的元素组成,可以将任何东西加入列表中,其中的元素之间没有任何关系;Python中的列表(list)用于顺序存储结构。它可以方便、高效的的添加删除元素,并且列表中的元素可以是多种类型。
数组也就是一个同一类型的数据的有限集合。
列表list与数组array的相同点:都可以根据索引来取其中的元素;
列表list与数组array的不同点:
a.列表list中的元素的数据类型可以不一样。数组array里的元素的数据类型一般是一样的;
b.列表list不可以进行数学四则运算,数组array可以进行数学四则运算;
import numpy as np
# 定义一个列表
a=[1,2,3,4]
print(a[0])
arr=np.array([1,2,3,4])
print(arr[0])
# # 数组的加法
print(arr+arr)
# # 数据的乘法
print(arr*6)
list1=[1,2,3,4]
list2=[2,3,4,5]
print(list1+list2)
for q,r in zip(list1,list2):
print(q+r)
data=[q+r for q,r in zip(list1,list2)] #zip是序列解包函数,将序列解包对多个变量同时进行赋值,序列解包函数可以很方便地同时遍历多个序列。
print(data)
arr1=np.array(list1)
arr2=np.array(list2)
print(arr1*9)
numpy.zeros(shape, dtype=float) 创建指定大小的数组,数组元素以 0 来填充
numpy.ones(shape, dtype=float) 创建指定形状的数组,数组元素以 1 来填充
参数描述
shape: 指定行列数(通过list,tuple 的形式均可)
dtype: 数据类型,可选
import numpy as np
#3行3列为0的整型数组
print(np.zeros((3,3),dtype = int))
#3行3列为1的整型数组
print(np.ones((3,3),dtype=int))
numpy.asarray(a, dtype = None)
或者numpy.array(object, dtype = None)
参数描述
a 或 object : 任意形式的输入参数,可以是列表, 元组, 可以多维。
dtype: 数据类型,可选 。
numpy.arange(start, stop, step, dtype)
参数描述
start:起始值,默认为0
stop:终止值(不包含)
step:步长,默认为1
dtype:返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
start:序列的起始值
stop:序列的终止值,如果endpoint为true,该值包含于数列中
num:要生成的等步长的样本数量,默认为50
endpoint:该值为 true 时,数列中包含stop值,反之不包含,默认是True。
retstep:如果为 True 时,生成的数组中会显示间距,反之不显示。
dtype:ndarray 的数据类型
#创建10到100 并且步长为10的数组(同切片一样包含开始,不包含结束)
arr1 = np.arange(10,100,10)
print(arr1)
#指定区间均匀分割创建数组
arr2 = np.linspace(10,100,10,endpoint=True,dtype=int)
print(arr2)
numpy.random.rand() 0-1之间均匀分布的浮点数
numpy.random.randn() 标准正态分布 (均值为0,标准差为1)
numpy.random.randint(low,high,size) 依据形状用low ~high 区间的数值创建数组
numpy.random.uniform(low, high, size) : 产生均匀分布的数组,起始值为low,high为结束值,size为形状
numpy.random.normal(loc, scale, size) : 产生正态分布的数组, loc为均值,scale为标准差,size为形状
在概率论和统计学中,均匀分布也叫矩形分布,它是对称概率分布,在相同长度间隔的分布概率是等可能的
#1.创建2行3列的0-1之间均匀分布浮点数
arr1 = np.random.rand(2,3)
print("0-1间均匀分布\n",arr1)
#2.创建3行3列的标准正态分布的浮点数
arr2 = np.random.randn(3,3)
print("正态分布\n",arr2)
#3.创建3,3列10-100之间的整数
arr3 = np.random.randint(10,100,(3,3))
print("10-100整数\n",arr3)
#4.创建3,3列均值80,标准差10的正态分布
arr5 = np.random.normal(80,10,(3,3))
print("均值为80,标准差为10的浮点数\n",arr5)
arr.dtype 元素类型
arr.ndim 数组维度
arr.shape 数组形状
arr.size 元素个数 等价于 len(list)
import numpy as np
arr1 = np.array([[1,2,3],[4,5,6]])
print("dtype",arr1.dtype)
print("ndim",arr1.ndim)
print("shape",arr1.shape)
print("size",arr1.size)
arr.reshape(shape) 复制数组后改变形状
numpy.ravel(arr1) 展开数组,变成1维
#1.创建一个1-40连续的数组维度为5行8列 名为update
update = np.arange(1,41).reshape((5,8))
update
#或者
update = update.reshape((8,5))
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样[开始:结束:步长]。
ndarray 数组可以基于 0 - n 的下标进行索引
与list, tuple 切片操作一致
一维数组[元素下标]
二维数组[第一个维度(行), 第二个维度(列)] 适合切片
# 一维数组的访问
arr=np.arange(10)
print(arr)
# 访问单个值
print(arr[3])
print(arr[-1])
# 访问范围
print(arr[2:8])
print(arr[8:2:-2])
# 数组的修改
arr[2:4]=10,11
print(arr)
import numpy as np
# 创建二维数组
arr=np.arange(12).reshape(3,4)
print(arr)
# 对于行列都有要求
print(arr[0:2,1:3])
# 按照行的条件选择数据
print(arr[0:2])
# 按照列选择数据
print(arr[:,2:4])
np.power(arr1,arr2或常数) == 等价于 **
np.modf(arr) #分开整数部分和小数部分
np.sqrt(arr) 对数组进行开方
np.around(arr,小数点位数) 4舍5入后保留指定位数的小数点
np.floor(arr) 向下取整 6.9 = 6
np.ceil(arr) 向上取整 6.1 = 7
np.sign(arr) 取符号,正数为 1, 0, 负数为-1
函数 | 说明 |
---|---|
sum | 计算数组的和 |
mean | 计算数组均值 |
std | 计算数组标准差 |
var | 计算数组方差 |
min | 计算数组最小值 |
max | 计算数组最大值 |
argmin | 返回数组最小元素的索引 |
argmax | 返回数组最大元素的索引 |
cumsum | 计算所有元素的累计和 |
cumprod | 计算所有元素的累计积 |
import numpy as np
# 使用numpy进行统计分析
arr=np.arange(20).reshape(4,5)
print(arr)
# 求整个数组的总和
print(arr.sum())
# 计算每一行数据的和
print(arr.sum(axis=1))
# 计算每一列数据的和
print(arr.sum(axis=0))
# 计算数据的累积和
print(np.cumsum(arr))
# 按列计算数据累积和
print(np.cumsum(arr,axis=0))
# 计算数据的累积积
print(np.cumprod(arr))
# 得到最大元素的索引位置
print(np.argmax(arr))
print(np.argmax(arr,axis=0))
# 得到最小元素的索引位置
print(np.argmin(arr))
print(np.argmin(arr,axis=1))