1 Numpy介绍
1.1 什么是Numpy
Numpy是Python中科学计算的一个基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。
NumPy包的核心是 ndarray 对象。它封装了python原生的同数据类型的 n 维数组,为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的。
1.2 Numpy数组与Python之间的区别
- NumPy 数组在创建时具有固定的大小,与Python的原生数组对象(可以动态增长)不同。更改ndarray的大小将创建一个新数组并删除原来的数组。
- NumPy 数组中的元素都需要具有相同的数据类型,因此在内存中的大小相同。 例外情况:Python的原生数组里包含了NumPy的对象的时候,这种情况下就允许不同大小元素的数组。
- NumPy 数组有助于对大量数据进行高级数学和其他类型的操作。通常,这些操作的执行效率更高,比使用Python原生数组的代码更少。
- 越来越多的基于Python的科学和数学软件包使用NumPy数组; 虽然这些工具通常都支持Python的原生数组作为参数,但它们在处理之前会还是会将输入的数组转换为NumPy的数组,而且也通常输出为NumPy数组。换句话说,为了高效地使用当今科学/数学基于Python的工具(大部分的科学计算工具),你只知道如何使用Python的原生数组类型是不够的 - 还需要知道如何使用 NumPy 数组。
1.3 Numpy特点
运行速度快,性能高。NumPy中当涉及到 ndarray 时,逐个元素的操作是“默认模式”,但逐个元素的操作由预编译的C代码快速执行。以此达到接近c的速度进行运算
2 Numpy数组的创建
首先导入Numpy包
import numpy as np
比较直接的创建方法:
# 通过Python的list来创建
a=[1,2,3,4,5]
b=np.array(a)
c=np.array([
[1,2,3],
[4,5,6]
])
不是很直接的创建方法:
- arange([start,]stop[,stop,dtype=None])
- 与reshape(d1,d2,…,dn)互相配合使用
a=np.arange(6) # a=[0,1,2,3,4,5]
a=np.arange(0,6,2) # a=[0,2,4]
a=np.arange(6).reshape(2,3) # a=[[0,1,2],[3,4,5]]
其他常用数组方法
3. ones(shape)
4. ones_like(a)
5. zeros(shape)
6. zeros_like(a)
7. empty(shape)
8. empty_like(a)
a=np.ones((2,3)) # a=[[1,1,1],[1,1,1]]
b=np.ones_like(a) # 顾名思义 像a一样的,但是数据全为1
c=empty((2,3)) # c为两行三列的数组,但里面的数据是随机的
3 对数组的索引
3.1 基础索引
就是通过下标哈哈哈哈哈
a=np.arange(20).reshape(4,5)
"""
a=[
[0,1,2,3,4],
[5,6,7,8,9],
[10,11,12,13,14],
[15,16,17,18,19]
]
"""
# 比如
a[3] # [15,16,17,18,19]
a[3,1] # 16
a[:2]
"""
[
[0,1,2,3,4],
[5,6,7,8,9]
]
"""
a[:2,2:4]
"""
[
[2,3],
[7,8]
]
"""
3.2 神奇索引
就很神奇,可以通过给定下标数组查找数组
a=np.arange(10)
index=[0,1,4,8]
a[index] # [0,1,4,8]
3.3 bool索引
就很布尔,通过给定的bool数组将值为True的元素取出
a=np.arange(10)
stats=(a%2==0)||(a>7)
a[stats] # 可以把a中为偶数或者大于7的数筛选出来 [0,2,4,6,8,9]
4 常用随机函数
1 rand(d0,d1,…,dn)
d0,d1,…,dn:维度
返回的数据在(0,1)之间,具有均匀分布
2 randn(d1,d2,…,dn)
返回的数值具有标准正态分布,均值为0,方差为1
3 randint([low,]high[,size,dtye])
生成随机整数[low,high)或者[0,high)
4 random([size])
生成(0.0,1.0)的随机数
5 choice(a[,size,replace,p])
a是一维数组,从其中随机生成结果
6 shuffle(x)
将x进行随机排列,只进行第一维度的排列
7 permutation(x)
把一个数组x进行随机的排列,或者数字的全排列
8 normal(loc,scale,size)
按照平均值loc和方差scale生成高斯分布的数字
9 unform([low,high,size])
[low,high) 中生成均匀分布的数字
5 常用数学计算函数
笔记越来越水了,,,,,,,,应该看得懂吧哈哈哈哈哈哈
a=np.array([1,2,3,4])
b=np.array([4,3,2,1])
a+1 # [2,3,4,5]
a+b # [5,5,5,5]
# sum 求和
np.sum(a) # 10 1+2+3+4
# prod 乘积
np.prod(a) # 24 1*2*3*4
# cumsum 累加和
np.cumsum(a) # [1,3,6,10]
# cumprod 累积和
np.cumprod(a) # [1,2,6,24]
# max/min 取最大最小值
#略
# median 取中位数
np.median(a) # 2.5
# mean 取平均值
np.mean(a) # 2.5
# std 标准差
np.std(a) # 1.118033988749895
# var 方差
np.var(a) # 1.25
6 给数组增加维度
1 np.newaxis
使用索引的语法给数组添加维度
a=np.array([1,2,3,4])
a[np.newaxis,:]
"""
[
[1,2,3,4]
]
"""
a[:,np.newaxis]
"""
[
[1],
[2],
[3],
[4]
]
"""
2 expand_dims(arr,axis)
和1一样,axis=0添加行维度,axis=1添加列维度
3 reshape(a,newshape)
任意改变多个维度
7 合并数据
1 concatenate(array_list,axis=0/1)
沿着指定的axis进行数据合并
2 vstack/row_stack
按行进行合并
3 hstack/column_stack
按列进行合并