Numpy基础用法(详细2.0)

Numpy简介

一个基于python的扩展库

提供高维数组对象ndarray,运算速度碾压python List

提供了各种高级数据编程工具,如矩阵运算、向量运算、快速筛选、IO操作、傅里叶变换、线性代数、随机数等

ndarray属性​​​​​​​

  1. ndim:维度
  2. shape:形状(各维度的长度)
  3. size:总长度
  4. dtype:元素类型

display:输出内容和类型(建议使用)

print:强制输出

output:Ipython默认输出

强制类型统一

numpy设计初衷是用于运算的,所以对数据类型进行统一优化

注意:

  • numpy默认ndarray的所有元素的类型是相同的
  • 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
输出如果是dtype('<U32')表示类型是Unicode的简写

type(xxx) # 查看xxx对象本身的类型​​​​​​​

xxxx.dtype  # 查看xxx内部的元素类型,由于ndarray的元素类型是强制统一的,所以只返回一个类型

                ​​​​​​​        np一般是为我们提供的一个ndarray(矩阵)

                        在numpy中,有些函数的参数名可以写,有些函数的参数名不能写

1.0 Numpy的常规函数

1.1# 建立一个值为1的数组

1.1)np.ones(shape, dtype=None, order='C')

shape: 形状,使用元组表示      dtype:表示元素类型    order:表示排序或

1.2# 建立一个值为0的数组

1.2)np.zeros(shape, dtype=float, order='C')

1.3# 建立一个自己指定数的数组

1.3) np.full(shape, fill_value, dtype=None, order='C')

fill_value:自己指定一个数为建立数组的值

1.4# 建立一个单位矩阵

1.4) np.eye(N, M=None, k=0, dtype=float)

N:表示建立矩阵的阶级    M:表示列数    k:表示对角线偏移(-1或1)

1.5# 建立一个等差数列(指定个数)

1.5) np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

start:表示起始值   stop:表示终值    num:数据个数  endpoint:表示是否需要最后一个值

1.6)# 建立一个等差数列(指定步长)

1.6) np.arange([start, ]stop[, step, ],dtype=None,*,like=None)

step:表示步长,[]内的元素可以免输入,默认[start]为0,[step]为1。

1.7# 使用随机数组成一个高维数组

1.7) np.random.randint(low, high=None, size=None, dtype='l')​​​​​​​

low:最小值     hogh:最大值      size:尺寸规模(几行几列)

1.8# 正态分布函数

  • np.random.randn(d0, d1, ..., dn) 标准正态分布 
  • np.random.normal(loc=0.0, scale=1.0, size=None) 普通正态分布

loc:期望值    scale:标准方差

1.9# 生成0到1的浮点型随机数组,左闭右开

1.9) np.random.random(size=None) 

1.10# 生成随机索引

1.10) np.random.permutation(10) 

1.11#  随机种子,添加一个种子x,x不变的到的随机数就不变

1.11)np.random.seed(x)  

2.1# 多数组之间的级联 

2.1) np.concatenate((a1, a2, ...), axis=0,out=None,dtype=None,casting="same_kind")   # (a1,a1...) 为需要级联的数组集合,axis为轴,0横轴,1纵轴。

2.2# 类型转换

2.2) xx.astype(dtype, order='K', casting='unsafe', subok=True, copy=True)        #dtype为np.类型,实例方法, 这个方法是将ndarray对象内的每一个元素进行指定的类型转换

2.3# 变形曲线

2.3) xx.reshape(shape, order='C')        # shape表示维度类型

1.0 ndarray的读写操作

1.1 索引访问

ndarray符合py列表的模式

【重点1】ndarray的高维数组访问,使用[dim1_index, dim2_index...]

eg:array123[1][2]   # 属于间接访问,相当于索引[2]针对的对象是array[1] 

        array[[A]]          #  直接访问,ndarray 也可以同时作为 ndarray对象的索引列表(建议使用

1.2 切片访问

array1[0:-1:2]        # 参数相对于array1[start : end : step]

【重点】    ndarray的访问形式: 
ndarray[dim1_index, dim2_index,...dimn_index]
dim_index支持的形式 :    int  [int]  切片  bool列表

 

1.3 ndarray的级联和切分

级联的注意事项:

  • 级联的参数是列表:一定要加中括号或小括号
  • 维度必须相同
  • 形状相符
  • 级联的方向默认是shape这个tuple的第一个值所代表的维度方向
  • 可通过axis参数改变级联的方向

# 多数组之间的级联 

np.concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting="same_kind")   # (a1,a1...) 为需要级联的数组集合,axis为轴,0横轴,1纵轴。参与级联的数组必须维度一致,在级联的维度上,必须长度一致

# 横级联和纵级联

np.hstack(tup)     # 横向级联

np.vstack(tup)      # 纵向级联

切分

与级联类似,三个函数完成切分工作:

  • np.split
  • np.vsplit
  • np.hsplit

# 拆分数组

np.split(ary, indices_or_sections, axis=0)        # indices_or_sections int 表示会按照指定的轴向,讲数组切分成N等分, 要求切分的方向上的长度能被N整除,indices_or_sections [m,n] 表达的是 按照0:m, m:n, n:的切片逻辑对数组进行拆分

np.hsplit(ary, indices_or_sections)        # 横向拆分

np.vsplit(ary, indices_or_sections)        # 纵向拆分

1.4 ndarray的运算

基本运算原则

两个矩阵运算,就是对应位置的数据的运算

广播 Broadcast

ndarray广播运算机制的两条规则

如果

  1. 两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符
  2. 或其中的一方的长度为1

则认为它们是广播兼容的。 广播会在缺失和(或)长度为1的维度上进行。

1.5 ndarray的聚合操作

np.sum(axis=None, dtype=None, out=None, keepdims=False, initial=0, where=True)    

常见聚合操作

np.nan    # 类型是float,添加到int数组中会报错,必须类型一致。

np.any()        # any 一个数组中,如果至少存在一个True, any函数就返回True

np.all()           # all 一个数组中,如果全都是True, all函数就返回True

2.0 Numpy进阶

2.1 添加元素

numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中

注意:

  1. 插入的维度要保证所有数组的长度是相同的
  2. 如果没有指定轴,数组会被扁平处理

# 添加元素

np.append(arr, values, axis=None)       # arr:目标,values:添加的数据,axis:轴向

2.2 插入元素

numpy.insert 函数在给定索引之前,沿给定轴在输入数组中插入值

如果未提供轴,则输入数组会被展开

# 添加元素

np.insert(arr, obj, values, axis=None)       # obj:需要插入的位置(索引值),如果未提供轴,则输入数组会被展开

2.3 删除元素

numpy.delete 函数返回从输入数组中删除指定子数组的新数组。 

如果未提供轴参数,则输入数组将展开。

# 删除元素

np.delete(arr, obj, axis=None)         # obj:需要插入的位置(索引值)

2.4 数组变形

numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr, newshape, order='C')

  • arr:要修改形状的数组
  • newshape:整数或者整数数组,新的形状应当兼容原有形状
  • order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。

# 数组变形

numpy.reshape(a, newshape, order='C')        # a:需要修改的维度形状,order:‘C’按行,‘F’按列,‘A’按原顺序,‘k’按元素在内存中的顺序

2.5 数组迭代器

# 数组迭代

ndarray.flat        # 没有参数自己对数组迭代

2.6 数组扁平处理

# 数组扁平处理

numpy.ndarray.flatten()         # 返回一份展开的数组拷贝,对拷贝所做的修改不会影响原始数组

numpy.ravel()         # 展平的数组元素,返回一个展开的数组引用,修改会影响原始数组。

2.7 数组翻转

简单理解就是按对角线调换位置

# 数组翻转

numpy.transpose([1,0])         #对换数组的维度[1,0]   0,1轴互换

3.0 Numpy数学函数

3.1 三角函数

接收的参数是弧度,不是角度

numpy.sin()             

numpy.cos()

numpy.tan()

numpy.pi        # 圆周率3.14

numpy.e        # 自然对数 2.72

3.2 舍入函数

numpy.around()

  • a: 数组
  • decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置

# 舍入函数

numpy.around(a, decimals=0, out=None)        #  a:数组,decimais:舍入小数位数

3.3 算数函数

# 加减乘除

add()           

subtract()

multiply()

divide()

# 幂运算,可以做开方运算

numpy.power() 

# 求余运算

numpy.mode() ​​​​​​​

# 自然底数的对数

np.log()

np.log2()

np.log10()

4.0 Numpy 查找和排序

4.1 查找索引

# 查找最大值的索引

numpy.argmax() 

# 查找最小值的索引

numpy.argmin()

4.2 条件查找

# 条件查找

numpy.where(condition, [x, y])         # condition:条件表达式,函数返回输入数组中满足给定条件的元素的索引

4.3 快速排序

np.sort()与ndarray.sort()都可以,但有区别:

  • np.sort()不改变输入
  • ndarray.sort()本地处理,不占用空间,但改变输入

numpy.sort() 函数返回输入数组的排序副本

# 快速排序

numpy.sort()        

4.4 索引排序

# 索引排序

numpy.argsort()         #函数返回的是数组值从小到大的索引值。

4.5 部分排序

有的时候我们不是对全部数据感兴趣,我们可能只对最小或最大的一部分感兴趣。

  • 当k为正时,我们想要得到最小的k个数
  • 当k为负时,我们想要得到最大的k个数

# 部分排序

numpy.partition(a,k)        # a:数组,k:-1,-2,最大值或最小值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
numpy函数是一种用于处理数组的科学计算库,其中包含了许多常用的数学、统计和线性代数函数,以下是一些常见的numpy函数用法: 1. 创建数组 numpy中可以通过numpy.array()函数创建数组,函数接受一个可迭代对象作为参数,例如: ```python import numpy as np # 创建一维数组 a = np.array([1, 2, 3]) print(a) # 输出:[1 2 3] # 创建二维数组 b = np.array([[1, 2], [3, 4]]) print(b) # 输出:[[1 2] # [3 4]] ``` 2. 索引和切片 numpy中的数组索引和切片与Python中的列表相似,可以使用整数索引和切片语法。例如: ```python # 一维数组的索引和切片 a = np.array([1, 2, 3, 4, 5]) print(a[2]) # 输出:3 print(a[:3]) # 输出:[1 2 3] # 多维数组的索引和切片 b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(b[1, 2]) # 输出:6 print(b[:2, 1:]) # 输出:[[2 3] # [5 6]] ``` 3. 数学函数 numpy中包含了许多常用的数学函数,例如: ```python # 平方函数 a = np.array([1, 2, 3]) print(np.square(a)) # 输出:[1 4 9] # 开方函数 b = np.array([1, 4, 9]) print(np.sqrt(b)) # 输出:[1. 2. 3.] # 取绝对值函数 c = np.array([-1, -2, 3]) print(np.absolute(c)) # 输出:[1 2 3] # 求和函数 d = np.array([1, 2, 3]) print(np.sum(d)) # 输出:6 # 求平均值函数 e = np.array([1, 2, 3]) print(np.mean(e)) # 输出:2.0 # 求标准差函数 f = np.array([1, 2, 3]) print(np.std(f)) # 输出:0.816496580927726 ``` 4. 线性代数函数 numpy中包含了许多常用的线性代数函数,例如: ```python # 点积函数 a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) print(np.dot(a, b)) # 输出:[[19 22] # [43 50]] # 矩阵求逆函数 c = np.array([[1, 2], [3, 4]]) print(np.linalg.inv(c)) # 输出:[[-2. 1. ] # [ 1.5 -0.5]] # 特征值与特征向量函数 d = np.array([[1, 2], [2, 1]]) eig_values, eig_vectors = np.linalg.eig(d) print(eig_values) # 输出:[ 3. -1.] print(eig_vectors) # 输出:[[ 0.70710678 -0.70710678] # [ 0.70710678 0.70710678]] ``` 5. 随机数函数 numpy还包含了许多常用的随机数函数,例如: ```python # 随机整数函数 a = np.random.randint(1, 10, (3, 4)) print(a) # 输出:[[5 8 7 4] # [4 4 4 4] # [9 9 9 2]] # 随机浮点数函数 b = np.random.rand(2, 3) print(b) # 输出:[[0.81317738 0.24850358 0.98823489] # [0.35087941 0.98767991 0.17130925]] ``` 以上是numpy函数的一些常见用法numpy函数的功能非常丰富,还有很多其他函数可以满足各种应用需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值