首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...

(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...

作者头像
凉凉心.
发布2025-10-13 17:49:43
发布2025-10-13 17:49:43
1610
举报
文章被收录于专栏:CSDN专栏CSDN专栏

Numpy是什么?

numpy是Python中科学计算的基础包。

它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。

Numpy能做什么?

numpy的部分功能如下:

  1. ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组
  2. 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
  3. 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
  4. 线性代数、随机数生成以及傅里叶变换功能。
  5. 用于集成由C、C++、Fortran等语言编写的代码的API。

Ndarray 的核心特性

  • Numpy中的数组

多维性

  • 支持0维(标量)、1维(向量)、2维(矩阵)及更高维数组

同质性

  • 所有元素类型必须一致(通过dtype指定)

高效性

  • 基于练习内存块存储,支持向量化运算

多维性

  • 创建0维的ndarray数组
代码语言:javascript
复制
import numpy as np
arr = np.array(5)
# 获取arr的维度;number of dimensions
print(arr.ndim) # 0 
  • 创建1维的ndarray数组
代码语言:javascript
复制
import numpy as np
arr = np.array([1,2,3])
# 获取arr的维度;number of dimensions
print(arr.ndim) # 1 
  • 创建二维数组
代码语言:javascript
复制
import numpy as np
arr = np.array([1,2,3],[4,5,6])
# 获取arr的维度;number of dimensions
print(arr.ndim) # 2

同质性

  • 不同的数据类型会被强制转换成相同的数据类型
代码语言:javascript
复制
arr = np.array([1,'hello'])
print(arr) # ['1','hello']

原本在数组中1是数值number,在创建后,会被自动转换为字符串

代码语言:javascript
复制
arr = np.array([1,2.22])
print(arr) # [1. 2.22]

浮点数也是一样,number会被转为float浮点数

属性

属性

说明

示例

shape

数组的形状:行数和列数

arr.shape

ndim

维度数量:数组是几维

arr.ndim

size

总元素个数:数组中所有元素的总数

arr.size

dtype

元素类型:数组中元素的类型

arr.dtype

----------

---------------------------

-----------

T

转置:行列格式互换

arr.T

itemsize

单个元素占用的内存字节数

arr.itemsize

nbytes

数组总内存占用量:size*itemsize

arr.nbytes

flags

内存存储方式:是否连续存储(高级优化)

arr.flags

shape形状

  • 0维
代码语言:javascript
复制
arr = np.array(1)
print(arr) # 1
print(arr.shape) # ()
  • 一维
代码语言:javascript
复制
arr = np.array([1,2,3])
print(arr) # [1 2 3]
print(arr.shape) # (3,)
  • 二维
代码语言:javascript
复制
arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.shape) # (3,3)

size个数

  • 0维
代码语言:javascript
复制
arr = np.array(1)
print(arr) # 1
print(arr.size) # 1
  • 一维
代码语言:javascript
复制
arr = np.array([1,2,3])
print(arr) # [1 2 3]
print(arr.size) # 3
  • 二维
代码语言:javascript
复制
arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.size) # 6

dtype数据类型

  • 0维
代码语言:javascript
复制
arr = np.array(1)
print(arr) # 1
print(arr.dtype) # int64
  • 一维
代码语言:javascript
复制
arr = np.array([1,2.5,3])
print(arr) # [1. 2.5 3.]
print(arr.dtype) # float64
  • 二维
代码语言:javascript
复制
arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.dtype) # int64

T数组转置

  • 转置效果在一维和零维数组上体现不出效果,只有在二维或更高维的数组上在能体现
代码语言:javascript
复制
arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.T) # [[1 4] [2 5] [3 6]]

ndarray 创建

上述都属于基本构造

ndarray还有很多构造方式

构造方式

说明

基础构造

适用于手动构建小规模数组或复制已有数据

预定义形状填充

用于快速初始化固定形状的数组(如全0占位、全1初始化)

基于数值范围生成

生成数值序列,常用于模拟时间序列、坐标网格等

特殊矩阵生成

数学运算专用(如线性代数中的单位矩阵)

随机数组生成

模拟实验数据、初始化神经网络权重等场景

高级构造方法

处理非结构化数据(如文件、字符串)或通过函数生成复杂数组

  • 函数生成列举

用途

方法

基础构造

np.array()

np.copy()

预定义形状填充

np.zeros()

np.ones()

np.empty()

np.full()

基于数值范围生成

np.arange()

np.linspace()

np.logspace()

特殊矩阵生成

np.eye()

np.diag()

随机数组生成

np.random.rand()

np.random.randn()

np.random.randint()

高级构造方法

np.array()

np.loadtxt()

np.fromfunction()

基本构造

np.array()基础创建
代码语言:javascript
复制
list1 = [1,2,3]
arr = np.array(list1)
print(arr.ndim) # 1
print(arr)# [1  3]

.array()还有其他参数,例如指定数组类型,指定数组维度,指定复制对象

np.copy()拷贝

将其他数组拷贝到新数组

代码语言:javascript
复制
# copy
arr1 = np.copy(arr)
print(arr1) #[1. 2. 3.]
  • 元素跟原始的数组相同,但是不是一个数组了

预定义形状

np.zeros()预定义形状
代码语言:javascript
复制
arr = np.zeros((2,3),dtype=int)
print(arr)
#[[0 0 0]
# [0 0 0]]
  • .zeros()默认创建的是float类型
.ones()全1和.empty()随机
代码语言:javascript
复制
# 全1
arr = np.ones((2,3),dtype=int)
print(arr)
# [[1 1 1] [1 1 1]]

# 空,默认是随机数
arr = np.empty((2,3))
print(arr)
# [[5.e-324 5.e-324 5.e-324]
# [5.e-324 5.e-324 5.e-324]] 
.full()填充
  • .full()方法可以指定填充的数值
代码语言:javascript
复制
# full 填充
arr = np.full((2,3),666)
print(arr)
#[[666 666 666]
# [666 666 666]]

数值范围生成

.arange(start,end,step)
代码语言:javascript
复制
arr = np.arange(1,10,2) # start,end,step(步长)
print(arr)
# [1 3 5 7 9]
  • 根据步长,生成从start数开始到end数的数组
  • 数组中不包含end本身,如果要包含建议:end+1
.linspace(start,end,slice)
代码语言:javascript
复制
arr2 = np.linspace(1,10,3) # start,end,slice(间隔)
print(arr2) #[ 1.   5.5 10. ]
  • 生成从start到end数的数组,并再这个区间中根据间隔数获得相应的值(等分的)

使用arange()也可以达到相应的效果,但是对数组内个数要求严苛一些

.logspace(start,end,num,base)

对数间隔

  • start 开始数值
  • end 结束数值
  • num 需要取多少个数
  • base 以多少为底
代码语言:javascript
复制
# 对数间隔数列
arr = np.logspace(0,4,5,base=2)
print(arr) # [ 1.  2.  4.  8. 16.]

其实这个不难理解,从linspace角度来看

logspace在执行前会先执行linsapce

代码语言:javascript
复制
arr2 = np.linspace(0,4,5)
print(arr2) # [0. 1. 2. 3. 4.]
  • logspace 会拿这个 linspace 生成的数组去取自身 base 数值的次方

矩阵

名称

维度

示例

说明

标量

零维

5,3

单个数字,无行列

向量

一维

[1,2,3]

只有行或列

举证

二维

[[1,2,3] [4,5,6]]

严格的行列结构(二维表)

张量

>=三维

[[1,[5,6][[7,[8,9]],4]]

高阶数组(如RGB图像)

矩阵是一个由行和列排列成的矩阵数组

A = \begin{bmatrix} 0&1&2\\ 3&4&5\\ 6&7&8\\ \end{bmatrix}

形状:这个矩阵有3行3列,记作 2*3矩阵

元素:矩阵中的每个数字称为元素


矩阵类型

定义

例子

零矩阵

所有元素为0

[ 0 0 0 0 ] \begin{bmatrix} 0&0\\0&0 \end{bmatrix} [00​00​]

单位矩阵

对角线上为1,其余为0

[ 1 0 0 1 ] \begin{bmatrix} 1&0\\0&1 \end{bmatrix} [10​01​]

对角矩阵

只有对角线有非零值

[ 2 0 0 3 ] \begin{bmatrix} 2&0\\0&3 \end{bmatrix} [20​03​]

对称矩阵

A = A T A=A^T A=AT

[ 1 2 2 3 ] \begin{bmatrix} 1&2\\2&3 \end{bmatrix} [12​23​]

\begin{bmatrix} 0&0\\0&0 \end{bmatrix}

单位矩阵对角线上为1,其余为0

\begin{bmatrix} 1&0\\0&1 \end{bmatrix}

对角矩阵只有对角线有非零值

\begin{bmatrix} 2&0\\0&3 \end{bmatrix}

对称矩阵

A=A^T
\begin{bmatrix} 1&2\\2&3 \end{bmatrix}
.eye(行,列)单位矩阵
  • 主对角线上的数字为1,其他数字为0
代码语言:javascript
复制
arr = np.eye(3)
print(arr)
#[[1 0 0]
# [0 1 0]
# [0 0 1]]


arr = np.eye(3,5,dtype=int)
print(arr)
#[[1 0 0 0 0]
# [0 1 0 0 0]
# [0 0 1 0 0]]
.diag([])对角矩阵
  • 主对角线上非零的0,其他的数字为0
代码语言:javascript
复制
arr = np.diag([1,2,3])
print(arr)
#[[1 0 0]
# [0 2 0]
# [0 0 3]]

方法内传递的是你要在对角线上出现的数字

随机数组的生成
均匀分布

生成0到1之间的随机浮点数(均匀分布)

代码语言:javascript
复制
arr = np.random.rand(2,3)
print(arr)
#[[0.70168642 0.71753434 0.96317388]
# [0.95506805 0.23474415 0.40630574]]

生成指定范围区间的随机浮点数(均匀分布)

代码语言:javascript
复制
arr = np.random.uniform(3,6,(2,3))
print(arr)
#[[5.03622931 4.34216028 5.06781859]
# [4.87780163 5.27826677 4.91474848]]
  • .uniform(start,end(row,col))

均匀随机生成一个从start到end范围之间的row行col列的数组


生成指定范围区间的随机整数(均匀分布)

代码语言:javascript
复制
arr = np.random.randint(3,30,(2,3))
print(arr)
#[[16 29 26]
# [29 22 22]]

设置随机种子

代码语言:javascript
复制
np.random.seed(20)
arr = np.random.randint(1,10,(2,5))
print(arr)
#[[4 5 7 8 3]
# [1 7 9 6 4]]
  • 种子的作用相当于一个独立的key值,根据key值生成了对应的数组
正态分布
  • 正态分布:两边小,中间大
代码语言:javascript
复制
arr = np.random.randn(2,3) # (-3到3之间)
print(arr)
#[[ 1.47105787 -0.50274641 -0.65000031]
# [ 1.6759262  -0.26047681  0.84227465]]

正态分布存在一个峰值,从峰值处,向两端减小和扩大数值,

在这里插入图片描述
在这里插入图片描述

逐渐向两段扩大和缩小值并不成立倒数关系

ndarray的数据类型

常用的数据有

  • 布尔类型 bool
  • 整数类型 int uint(无符号整型)
  • 浮点数 float
  • 复数 complex
代码语言:javascript
复制
arr = np.array([2,0,4],dtype='bool')
print(arr) # [ True False  True]

注意,在使用各类数据类型时,还需要考虑到对应的类型能否符合存储要求

代码语言:javascript
复制
arr = np.arange(0,5000,dtype=np.int8)
print(arr) # [   0    1    2 ... -123 -122 -121]

这里明显已经爆内存了,所以随后数值为负数

不使用int8,改为int16。扩大存储,即可解决问题

代码语言:javascript
复制
arr = np.arange(0,5000,dtype=np.int16)
print(arr)# [   0    1    2 ... 4997 4998 4999]

或者使用无符号整型

代码语言:javascript
复制
arr = np.arange(0,5000,dtype=np.uint)
print(arr)# [   0    1    2 ... 4997 4998 4999]

数据类型表格

数据类型

说明

bool

布尔类型

int8、uint8int16、uint16int32、uint32int64、uint64

有符号、无符号的8位整型有符号、无符号的16位整型有符号、无符号的32位整型有符号、无符号的64位整型

float16float32float64

半精度浮点型单精度浮点型双精度浮点型

complex64complex128

用两个32位浮点数表示的复数用两个64位浮点数表示的复数

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Numpy是什么?
  • Numpy能做什么?
  • Ndarray 的核心特性
    • 多维性
    • 同质性
  • 属性
    • shape形状
    • size个数
    • dtype数据类型
    • T数组转置
  • ndarray 创建
    • 基本构造
      • np.array()基础创建
      • np.copy()拷贝
    • 预定义形状
      • np.zeros()预定义形状
      • .ones()全1和.empty()随机
      • .full()填充
    • 数值范围生成
      • .arange(start,end,step)
      • .linspace(start,end,slice)
      • .logspace(start,end,num,base)
    • 矩阵
      • .eye(行,列)单位矩阵
      • .diag([])对角矩阵
      • 随机数组的生成
  • ndarray的数据类型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档