numpy库 降维,矩阵创建与元素的选取,修改

目录

1.降维函数ravel()和flatten

ravel():

flatten():

2.矩阵存储与内存结构

3.修改矩阵形状的方法

4.特殊矩阵创建

[全零矩阵: 如np.zeros(5) 创建含5个零的一维数组,输出中零后的点(如 0.)表示浮点数类型。](#全零矩阵: 如np.zeros(5) 创建含5个零的一维数组,输出中零后的点(如 0.)表示浮点数类型。)

全一矩阵:如np.ones(5)创建含5个1的一维数组

​编辑

矩阵中填充指定数据

对角线为1的矩阵

5.序列生成函数

6.一维数组元素的选取和修改

7.二维数组元素的选取和修改

8.三维矩阵元素的选取和修改


1.降维函数ravel()和flatten

ravel():

高维数据转换为一维 ,返回原始数据的视图(内存共享),仅改变展示形式(如三维→一维)。

示例:V.ravel() 生成一维数组 r2,与原数据 V 共享内存。

python 复制代码
import numpy as np
list1=[1,2,3,4,5,6,7,8]
v=np.array(list1)
v=v.reshape(2,2,2)
r2=v.ravel()
print(r2)

#[1,2,3,4,5,6,7,8]

flatten():

同样降维为一维,但返回元数组的副本(内存独立),修改副本不影响原数据

示例:V.flatten() 生成 r3,与原数据 V 无关联。
核心区别: ravel 不创建副本,flatten 创建副本(独立内存)

python 复制代码
import numpy as np
list1=[1,2,3,4,5,6,7,8]
v=np.array(list1)
v=v.reshape(2,2,2)
r3=v.flatten()#非常重要
print(r3)

#[1,2,3,4,5,6,7,8]

2.矩阵存储与内存结构

矩阵数据在内存中以链式结构 存储(非连续块),按需分配空间,避免内存浪费。

矩阵的"展示形式"(如 2×2)仅为逻辑视图,实际存储通过指针链接分散的内存区域。

3.修改矩阵形状的方法

shape 属性 : 直接修改(如 V.shape = (2,4))可调整维度结构。

其他方法:reshape、ravel、flatten 均可实现升维/降维

python 复制代码
list1=[1,2,3,4,5,6,7,8]
v=np.array(list1)
v.shape=(2,4)
print(v)
#[[1,2,3,4],[5,6,7,8]]

4.特殊矩阵创建

np.zeros():创建全零矩阵,默认浮点类型。

np.ones():创建全一矩阵,类似 np.zeros() 用法。

np.full():填充指定值(如 np.full((2, 2), 5) 生成全为 5 的矩阵)。

np.eye():生成单位矩阵(主对角线为 1,如 np.eye(5, 5))。

全零矩阵 : 如np.zeros(5) 创建含5个零的一维数组,输出中零后的点(如 0.)表示浮点数类型。

python 复制代码
import numpy as np
#创建全为0的数组
a=np.zeros(5)
b=np.zeros((2,2))#只能接受一个参数
c=np.zeros((3,2,2))
print(a,'\n',b,'\n',c)
  • 注意:函数接收单个参数时,若需传递多值(如矩阵维度),需将值包装为元组(如 (2, 2))np.zeros((2, 2)) 创建 2x2 全零矩阵,外层括号为函数调用,内层为元组参数。

**全一矩阵:如np.ones(5)**创建含5个1的一维数组

python 复制代码
import numpy as np    
#创建全为一的数组
d=np.ones(5)
e=np.ones((2,2))
f=np.ones((3,2,2))
print(d,'\n',e,'\n',f)

矩阵中填充指定数据

python 复制代码
import numpy as np
g=np.full((2,2,2),5)
print(g)

生成一个全为5的(2,2,2)的三维数据
*

对角线为1的矩阵

python 复制代码
import numpy as np
h=np.eye(5,5)
print(h)

[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]

5.序列生成函数

  • np.arange() :类似 range(),生成等差序列的矩阵(如 np.arange(0, 9, 3) 生成 [0, 3, 6])。

    python 复制代码
    import numpy as np
    r1=np.arange(0,9,3)#(start,end,step)左闭右开的产生有规律的数据,与range()相似
    print(r1)
    
    [0 3 6]
  • np.linspace() :在指定区间内均匀分割生成数据(如 np.linspace(0, 1, 21) 生成 21 个等间隔值)。

    python 复制代码
    import numpy as np
    r2=np.linspace(0,1,21)#(start,end,nums),左右都是闭区间
    print(r2)
    [0.   0.05 0.1  0.15 0.2  0.25 0.3  0.35 0.4  0.45 0.5  0.55 0.6  0.65
     0.7  0.75 0.8  0.85 0.9  0.95 1.  ]

6.一维数组元素的选取和修改

索引与切片:与列表操作一致 (如 array1[1] 获取索引 1 的值)。

批量索引:通过列表指定多个索引(如 array1[[1, 3, 5]] 提取对应位置的值)。

修改元素:

单点修改:array1[0] = 10。

批量修改:array1[[1, 3, 5]] = 20 或切片赋值 array1[0:6] = 100

python 复制代码
import numpy as np
array1=np.arange(1,9,1)
print(array1)

# 选取某个元素
a=array1[1]

# 选取某些元素
b=array1[[1,3,5]]
print(b)

# 切片左闭右开
c=array1[0:6]
print(c)
# 修改某个元素
array1[0]=10
# 批量修改某些元素
array1[[1,3,5]]=20
print(array1)
array1[0:5]=10
print(array1)
[1 2 3 4 5 6 7 8]
[2 4 6]
[1 2 3 4 5 6]
[10 20  3 20  5 20  7  8]
[10 10 10 10 10 20  7  8]

注意:中括号 [] 在矩阵操作中仅用于索引/切片或创建列表,需注意上下文区分。

7.二维数组元素的选取和修改

python 复制代码
import numpy as np
array1=np.arange(24).reshape(4,6)
print(array1)
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

# 选取某个元素
a=array1[1,4]#第二行五列
# 选取某行元素
b=array1[1,:]#逗号分隔行和列
# 选取某些行
c=array1[[0,2],:]#如果不是连续的行,[]

# 选取某列
d = array1[:,1]
# 选取某些列
e=array1[:,[1,3]]

# 修改某个元素
array1[1,4]=100
# 修改某行元素
array1[1,:]=100
array1[[1,2],:]=50

8.三维矩阵元素的选取和修改

第一个逗号分隔维度,后续逗号分隔行和列(如 1,0,0 表示第一组数据的第0行第0列)

python 复制代码
import numpy as np
array1=np.arange(48).reshape(2,4,6)
print(array1)
[[[ 0  1  2  3  4  5]
  [ 6  7  8  9 10 11]
  [12 13 14 15 16 17]
  [18 19 20 21 22 23]]

 [[24 25 26 27 28 29]
  [30 31 32 33 34 35]
  [36 37 38 39 40 41]
  [42 43 44 45 46 47]]]
# 选取某个元素
# 首先确定选取哪个二维数组
a=array1[1,0,0]
print(a)
24
# 选取某行元素
b=array1[1,0,:]
print(b)
[24 25 26 27 28 29]
# 选取某些行元素
c=array1[0,[1,3],:]
print(c)
[[ 6  7  8  9 10 11]
 [18 19 20 21 22 23]]
d=array1[0,1:3,:]
print(d)
[[ 6  7  8  9 10 11]
 [18 19 20 21 22 23]]
# 选取某列
e=array1[0,:,1]
print(e)
[ 1  7 13 19]
# 选取某些列
f=array1[1,:,[1,3]]
print(f)
[[25 31 37 43]
 [27 33 39 45]]
g=array1[0,:,1:4]
print(g)
[[ 1  2  3]
 [ 7  8  9]
 [13 14 15]
 [19 20 21]]
# 修改
array1[1,0,0]=100
相关推荐
paid槮2 天前
Python进阶第三方库之Numpy
开发语言·python·numpy
星期天要睡觉2 天前
NumPy库使用教学,简单详细。
numpy
lxmyzzs2 天前
【bug】Yolo11在使用tensorrt推理numpy报错
yolo·计算机视觉·bug·numpy
WBluuue3 天前
数学建模:运筹优化类问题
python·算法·数学建模·numpy·动态规划·matplotlib·图论
@MMiL3 天前
Python 中常见的数据管理高效方法
python·numpy·pandas·matplotlib
赴3354 天前
Numpy库,矩阵形状与维度操作
开发语言·python·矩阵·numpy·resize·reshape
万粉变现经纪人4 天前
如何解决pip安装报错ModuleNotFoundError: No module named ‘django’问题
后端·python·pycharm·django·numpy·pandas·pip
橘子编程5 天前
机器学习-线性回归
python·numpy·scikit-learn·matplotlib
超龄超能程序猿12 天前
(5)机器学习小白入门 YOLOv:数据需求与图像不足应对策略
人工智能·python·机器学习·numpy·pandas·scipy