Numpy是Python中科学计算的一个基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。
NumPy包的核心是 ndarray 对象。它封装了python原生的同数据类型的 n 维数组,为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的。
- NumPy 数组在创建时具有固定的大小,与Python的原生数组对象(可以动态增长)不同。更改ndarray的大小将创建一个新数组并删除原来的数组。
- NumPy 数组中的元素都需要具有相同的数据类型,因此在内存中的大小相同。 例外情况:Python的原生数组里包含了NumPy的对象的时候,这种情况下就允许不同大小元素的数组。
- NumPy 数组有助于对大量数据进行高级数学和其他类型的操作。通常,这些操作的执行效率更高,比使用Python原生数组的代码更少。
- 越来越多的基于Python的科学和数学软件包使用NumPy数组; 虽然这些工具通常都支持Python的原生数组作为参数,但它们在处理之前会还是会将输入的数组转换为NumPy的数组,而且也通常输出为NumPy数组。换句话说,为了高效地使用当今科学/数学基于Python的工具(大部分的科学计算工具),你只知道如何使用Python的原生数组类型是不够的 - 还需要知道如何使用 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) 中生成均匀分布的数字
笔记越来越水了,,,,,,,,应该看得懂吧哈哈哈哈哈哈
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.256 给数组增加维度
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)
任意改变多个维度
1 concatenate(array_list,axis=0/1)
沿着指定的axis进行数据合并
2 vstack/row_stack
按行进行合并
3 hstack/column_stack
按列进行合并



