Python NumPy二维数组创建与操作实战指南
本文详细介绍Python中NumPy库的使用,重点讲解一维及二维数组的创建方法,对比普通列表与NumPy数组的输出差异。内容涵盖数组分片、维度变换(reshape、transpose等)、组合与分割、类型转换以及文件存储读取(savetxt/loadtxt)等核心操作,附带完整代码示例与运行结果。
前言
暂时搁置上位机实战开发,今天我们将聚焦于一个新主题——NumPy库的实际应用。
1 一维数组
示例:使用常规Python方法生成一维数组
num = [0 for i in range(1,5)] # 创建一维数组
print(num) # 打印数组
print("-"*50) # 分割线
num[2]=6 # 将第三个元素修改位6
print(num) # 打印数组
print("-"*50) # 分割线
运行结果

示例:使用NumPy库生成一维数组
from numpy import *
m1 = arange(5)
print(m1)
print("-"*50) # 分割线
运行结果

2 二维数组
示例:使用常规Python方法生成二维数组
num = [[0 for i in range(1,5)]for j in range(1,5)]
print(num) # 打印数组
print("-"*50) # 分割线
num[2][1]=3 # 将第三行第二个元素修改为3
print(num) # 打印数组
print("-"*50) # 分割线
运行结果

示例:使用NumPy库生成二维数组
from numpy import *
m1 = array([arange(1,4),arange(4,7),arange(7,10),arange(10,13),arange(13,16),arange(16,19)]) # 创建6行3列的二维数组
print(m1)
print("-"*50) # 分割线
运行结果

观察上述输出可以发现,通过常规方法创建的数组在打印时元素间以逗号分隔,而使用NumPy创建的数组默认以空格作为元素分隔符。
3 二维数组的分片
请结合程序注释与下方的结果对照进行理解。
from numpy import *
m1 = array([arange(1,4),arange(4,7),arange(7,10),arange(10,13),arange(13,16),arange(16,19)]) # 创建6行3列的二维数组
print(m1)
print("-"*50) # 分割线
print(m1[1][0:]) # [x][0:] 获取第x行的全部元素(单行)
print("-"*50) # 分割线
print(m1[1:3]) # [x1:x2] 获取第x1~x2行的全部元素(多行)
print("-"*50) # 分割线
print(m1[1::4]) # [x1::x2] 分片操作,从第x1行开始,步长为x2
运行结果

4 数组维度的操作
.reshape:将一维数组转换为多维数组
用法:一维数组名.reshape(x,y,z),此操作可将一维数组重塑为三维数组。
from numpy import *
m1 = array([arange(1,9)]) # 创建一维数组
print(m1)
print("-"*50) # 分割线
print(m1.reshape(2,2,2)) # 将一维数组转为三维数组
print("-"*50) # 分割线
运行结果

.ravel或flatten:将多维数组展平为一维数组
用法:数组名.ravel() 或 数组名.flatten()。
from numpy import *
m1 = array([arange(1,4),arange(4,7),arange(7,10),arange(10,13),arange(13,16),arange(16,19)]) # 创建6行3列的二维数组
print(m1)
print("-"*50) # 分割线
print(m1.ravel()) # 将一维数组转为三维数组
print("-"*50) # 分割线
运行结果

.shape:调整高维数组为低维数组
用法:数组名.shape=(x行,列),通过修改shape属性来改变数组维度。
.transpose:对数组进行转置操作
用法:数组名.transpose()。
from numpy import *
m1 = array([arange(1,4),arange(4,7),arange(7,10),arange(10,13),arange(13,16),arange(16,19)]) # 创建6行3列的二维数组
print(m1)
print("-"*50) # 分割线
print(m1.transpose()) # 将数组转置
print("-"*50) # 分割线
运行结果

5 数组的组合与分隔
5.1 水平组合
hstack:将多个数组水平拼接在一起
用法:hstack((数组A,数组B)),实现数组A和数组B的水平拼接。
5.2 垂直组合
vstack:将多个数组垂直拼接在一起
用法:vstack((数组A,数组B)),实现数组A和数组B的垂直拼接。
5.3 水平分隔
hsplit:
用法:hsplit(数组名,x),其中x指定将数组水平分割成的部分数量。
5.4 垂直分隔
vsplit:
用法:vsplit(数组名,x),其中x指定将数组垂直分割成的部分数量。
6 数组转列表
.tolist:将NumPy数组转换为Python列表
用法:数组名.tolist()。
7 数组的存储和读取及分隔符
savetxt和loadtxt函数可用于将数组保存为CSV格式文件。CSV文件支持多种分隔符,如空格、逗号或分号等。这两个函数默认使用空格作为分隔符,但可以通过delimiter关键字参数指定其他分隔符。
7.1 数组的存储
savetxt
用法:savetxt("文件名.txt",数组名,fmt=数组格式,delimiter=';')。
补充说明:数组格式参数fmt可指定为整数型(%d)或浮点型(%f)。
from numpy import *
m1 = array([arange(1,4),arange(4,7),arange(7,10),arange(10,13),arange(13,16),arange(16,19)]) # 创建6行3列的二维数组
print(m1)
print("-"*50) # 分割线
savetxt("文件名.txt",m1,fmt='%d',delimiter=';')
运行结果1

运行结果2(分隔符为空格的情况)

7.2 数组的读取
loadtxt
用法:新数组 = loadtxt("文件名.txt",dtype=‘数组格式',delimiter=',')。
补充说明:数组格式参数dtype可指定为整数型(int)或浮点型(float)。
from numpy import *
print("-"*50) # 分割线
a = loadtxt("文件名.txt",dtype=int,delimiter=';')
print(a) # 将数组转置
print("-"*50) # 分割线
运行结果

总结
savetxt函数在保存数据时,允许将普通数组中的默认分隔符修改为空格。
利用这一特性,我们可以将包含逗号的二维数组转换为以空格或分号为分隔符的二维数组格式。
示例:使用列表方法构建一个二维数组并保存读取
# 二维数组创建
from numpy import *
num = [[0 for j in range(1,5)]for i in range(1,4)]
print(num) # 打印数组
print("-"*50) # 分割线
num[2][1]=3 # 将第三行第二个元素修改为3
print(num) # 打印数组
print("-"*50) # 分割线
savetxt("a.txt",num,fmt='%d',delimiter=' ') # 将数组保存为分隔符为空格的形式
b = loadtxt("a.txt",dtype=int,delimiter=' ') # 将数组读取出来赋给新数组
print(b) # 打印新数组
print("-"*50) # 分割线
运行结果

先执行数组保存,随后读取该数组。

以上为个人经验分享,希望能为大家提供参考,也希望大家多多支持本站。如有错误或未考虑周全之处,欢迎批评指正。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













