当前位置: 首页 > news >正文

NumPy核心操作全攻略

        NumPy(Numerical Python)是 Python 生态中用于科学计算的核心库,提供高性能的多维数组对象(ndarray)及相关的数学运算工具。其核心功能围绕数组操作、线性代数、随机数生成等,是数据科学、机器学习等领域的基础依赖。

numpy核心数据类型

        NumPy 的核心是 ndarray(N-dimensional array),一种高效存储和操作多维数据的容器。与 Python 原生列表相比,ndarray 支持矢量化运算,避免循环,显著提升性能。

  • 特性
    • 固定大小,创建后不可变(元素可修改)。
    • 所有元素类型相同(dtype 指定)。
    • 支持广播(Broadcasting)机制实现不同形状数组的运算。

numpy安装

        这个我们可以直接在命令行窗口或者终端进行pip install numpy就行了,但是可能会比较慢,我们这里加上清华的镜像源

pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

创建一个ndarray对象

1 直接创建

import numpy as npa=np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13])
print(type(a))

这样我们就创建了一个数组(如果我们想创建一个多维数组对象,我们直接传入一个多维数组就行了),我们还查看了一下,我们创建了一个什么类型的数据,结果输出<class 'numpy.ndarray'>,这样我们就要记得,numpy创建的数据类型为<class 'numpy.ndarray'>

2 用可迭代对象arrang创建

import numpy as np
r1 = np.arange(0,9,3)
print(r1)

这里我们创建了一个一维的数组对象,可迭代对象内容为 [0 3 6]

3 用linspace创建

import numpy as np
r2 = np.linspace(0,1,5)
print(r2)

 先给出结果[0.   0.25 0.5  0.75 1.  ]

从结果可以看出,有三个参数,前两个为区间的左右两头数值,最后一个表示个数,要注意这个数组内容都是浮点型的,对于arrange相比,这个左右区间都是闭的。

4 创建特殊数组

import numpy as np
a=np.zeros(3)
print('一维:\n',a)
b=np.zeros((3,3))
print('二维:\n',b)
c=np.zeros((3,3,3))
print('三维:\n',c)

输出结果:

 这里我们创建了几个全0矩阵,以为我们只能传入一个参数。那么我们要传入几个参数的术后,我们要传入一个数组,数组中几个数表示几位的。大小就是数组的那样n*n*n的,同样全一数组也是这样的,用np.ones()就不展示了。

5 full()创建矩阵

import numpy as np
a=np.full((3,3),6)
print(a)

输出结果:

我们可以看到,full可以提供两个参数,一个来控制矩阵的维度大小,另有一个控制填充值。

6 创建单位矩阵

import numpy as np
a=np.eye(5,5)
print(a)

 输出

这里我们输出了一个矩阵,对角线全一,如果列和行不相同,那么就从左一开始为一,大家可以试下。

另外我们可以通过对我们创建的这个多维数组对象进行查看

我们可以看到这里有许多方法 ,其中包含许多方法,例如reshape,dot,copy,ndim等等,下面我们来说些常用的

numpy常用操作

1 查看矩阵基本数据类型

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print('矩阵形状',a.shape)
print('矩阵维度',a.ndim)
print('矩阵大小',a.size)
print('矩阵储存位置',a.data)
print('每个矩阵数据存储所占位置',a.itemsize)

输出结果

2 基本运算

import numpy as np
array1 = np.array([[1,2],[3,4]])
array2 = array1 * 2print(array1 + array2)  # 加法
print(array1 - array2)  # 减法
print(array1 * array2)  # 乘法
print(array1 / array2)  # 除法
print(array2 % array1)  # 取余
print(array1 // array2) # 取整

输出结果 

3 reshape方法

这个既可以升维度也可以降维度。

import numpy as np
a=np.array([1,2,3,4,5,6,7,8])
b=a.reshape(2,4)
c=a.reshape(2,-1)
print(a)
print(b)
print(c)

 这里我展示了两种修改数据形状的方法,一种给出确定的大小,然后就可以转化到自己想要的了,还有一种给出一个确定的,剩下可以让机器自己算,注意这里要可以整除,不然会报错。

我们这里还要注意,a.reshape(2,4)是又创建了一个副本,并不是对原来的数据进行修改,如果要对原本数据进行修改,我们要对他进行赋值例如a=a.reshape(2,4).

4 resize()方法

import numpy as np
a=np.array([[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8]])
b=a.resize(2,2)
print(a)
print(b)

输出

resize是一个可以调整矩阵大小的方法。可以调整到自己指定的大小。这里调整后的数据是从第一行开始取,作为我们调整后的数据。

注意!这里a.resize(2,2)是一个None值,说明我们调整的是a原本数据

5 repeat

import numpy as np
a=np.array([1,2,3])
c=a.repeat(3)
print(c)

 输出

这个是将矩阵中每个值x参数个,不是数值x而是x个数。

6 选取

                        ​​​​​​​        

import numpy as np
a=np.array([[1,2,3,4,5,6,7,8],[9,10,11,12,13,14,15,16],[17,18,19,20,21,22,23,24]])
print(a[1:3,2:8])

结果

我们可以根据矩阵进行想列表中切片那样,进行选取,拿第一个参数表示第一维为例,如果是[0:3]就表示从第一行到第二行的全选中了,[1:]表示第二行以及后面的。后面参数也是这样。

7 flatten()

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=a.flatten()
print(b)
#c = a.ravel()  有相同的作用

输出

这个函数就相当于np.reshape(-1),revel也可以,但是flatten用到最多就是把矩阵展开变成一维的

8 矩阵的基本运算

点乘

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(np.dot(a,[[2,2,2],[2,2,2],[2,2,2]]))
print(a.dot([[2,2,2],[2,2,2],[2,2,2]]))

输出 

这里我用了两种点乘的方法,输出结果一样。这里是矩阵与矩阵之间的相乘。

这里还有点需要注意的是,矩阵直接直接相乘是a*b,点乘是dot(a,b),矩阵直接相乘也可以a*2这样可以直接将矩阵的数值扩大二倍。

转置

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=a.T
print(a)
print(b)

输出直接用a.T来实现,这里也是生成了一个副本不是对源数据进行修改 

求逆

这里是求伪逆,不管这个矩阵有没有可逆,都可以求所以我们要验证下

import numpy as np
a=[[1,2],[3,4]]
b=np.linalg.inv(a)
print(b)
print(np.dot(a,b))

输出

 9 连接

import numpy as np# 生成基数组
array1 = np.array([[1,2,3],[4,5,6]])
array2 = np.array([[7,8,9],[10,11,12]])# 水平组合(沿列方向拼接)
a3 = np.hstack((array1, array2))     # 水平拼接array1和array2
a4 = np.hstack((array2, array1))     # 水平拼接array2和array1
a5 = np.hstack((array1, array2, array1))  # 三数组水平拼接
a6 = np.concatenate((array1, array2), axis=1)  # 等价于vstack
print(a3)
print(a4)
print(a5)# 垂直组合(沿行方向拼接)
a7 = np.vstack((array2, array1))     # 垂直拼接array2和array1
print(a6)# 通用连接函数(axis=0为垂直方向)
a8 = np.concatenate((array1, array2), axis=0)  # 与vstack效果相同
print(a8)

输出​​​​​​​

上面我们采用了三种方法,分别是三种方法一种垂直方向,一种水平方向,还有给用concatenate来实现。可以参照对应输出来看。

http://www.dtcms.com/a/293477.html

相关文章:

  • YOLO12论文阅读:Attention-Centric Real-Time Object Detectors
  • SQLAlchemy 2.0简单使用
  • nodejs模块化
  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十课——车牌识别的FPGA实现(2)实现车牌定位
  • XCKU035‑1SFVA784C Xilinx FPGA KintexUltraScale AMD
  • C# 类 封装 属性 练习题
  • 深度学习 --- 激活函数
  • 计算机底层入门 05 汇编学习环境通用寄存器内存
  • MDC(Mapped Diagnostic Context) 的核心介绍与使用教程
  • LINUX 722 逻辑卷快照
  • (Arxiv-2025)HiDream-I1:一种高效图像生成基础模型,采用稀疏扩散Transformer
  • 在PyCharm中复现LaneNet车道线检测模型
  • JavaScript 01 JavaScript 是什么
  • 医疗系统伪代码
  • Ctenos7最小化安装 可以ping通
  • MySQL InnoDB存储引擎深度解析:从原理到优化
  • 【JavaSE】JDBC和连接池学习笔记
  • k8s:利用helm离线部署consul v1.21.2
  • 【Altium Designer2025】电子设计自动化(EDA)软件——Altium Designer25版保姆级下载安装详细图文教程(附安装包)
  • @PostConstruct 注解
  • Python进阶第三方库之Numpy
  • Docker-compose:服务编排
  • M3088NL是一款网络滤波器/变压器支持100M和1000M网络环境,适用于高速网络传输场景M3088
  • 单片机的几种GPIO输入输出模型详解
  • JavaWeb学习打卡11(cookie(甜点)详解)
  • iView Table组件二次封装
  • RAG实战指南 Day 21:检索前处理与查询重写技术
  • 数据库隔离级别
  • SQL语句中锁的使用与优化
  • 正则表达式:文本处理的强大工具