首页 > Python资料 博客日记
Python NumPy数组的创建方法
2024-10-17 22:00:05Python资料围观34次
Numpy是Python中科学计算的基础包,其核心对象就是ndarray(n维数组)。利用数组可以快速执行逻辑,形状操作,统计和傅里叶变换等运算,其效率比Python原生的数组效率更高。因此使用Numpy的第一件事就是创建Numpy数组,本文总结了5种常用的创建NumPy数组方法。
文章目录
一、使用NumPy内部功能函数
1.1 使用arange函数
Numpy的arange函数可以快速创建一个一维数组,功能和python的range函数很像,但它返回的是NumPy数组而不是列表。数组中元素的下标从0开始(和Python的列表相同):
import numpy as np
a = np.arrange(10)
通过数组的shape属性可以查看数组的维度,返回的元组中只有1个数字,说明a是一个一维数组:
a.shape
1.2 创建多维数组
在使用arange创建一维数组时,通过reshape函数可以将其转化为指定的维度,下面创建一个3行3列二维数组:
a1 = np.arange(9).reshape(3,3)
通过a1的shape属性可以看到返回了2个数字,说明这是二维数组(这个就是reshape的参数):
a1.shape
访问二维数组中的元素,需要2个索引值:
a1[1][2] # 访问第2行,第3列元素(索引从0开始)
同理,三维数组就需要给reshape函数提供3个参数(访问元素也需要3个索引值),N维数组依次类推:
a2 = np.arange(27).reshape(3,3,3)
注意:arange函数返回的元素个数需要和reshape参数的乘积相同,示例中是27=3 X 3 X 3,否则无法生成N维数组。
1.3 使用zeros/zeros_like和ones/ones_like函数
通常数组中的元素最初值可能是未知的,但形状通常是已知的。NumPy提供了一系列函数来创建指定形状的数组,并用初始值填充,这样可以避免后期数组增长(NumPy数组变更形状代价很大,需要删除重建,这点和Python不同)。
zeros和ones函数可以创建数组并分别用0和1预填充。zeros和ones传入的参数为数组的各个维度值组成的元组。下面示例使用zeros和ones分别创建一个3行3列的二维数组,注意各维度值是以元组的形式传入的,因此是双层括号:
a3 = np.zeros((3,3)) # 以元组的形式传入
a4 = np.ones((3,3))
zeros_like和ones_like函数会复制指定数组对象的形状,同时采用0和1填充,下面示例复制a4的形状,但是填充从1变成了0:
a4_like = np.zeros_like(a4)
1.4 使用full/full_like函数
full函数的效果和zeros和ones类似,但可以自己指定填充元素的值(zeros和ones只会使用0和1填充),下面创建一个3*3的二维数组,并使用9填充,第一个参数是元组(3,4),代表3行4列,第二个参数9代表填充值:
a5 = np.full((3,4), 9)
同样full_like函数可以复制指定数组的形状,并指定用7填充:
a5_like = np.full_like(a5, 7) # 复制a5的形状,并用7填充
1.5 使用empty/empty_like函数
empty函数效果和zeros和ones的也类似,但它不会初始化元素的值(值是随机的,取决于内存状态),下面创建一个2行2列的二维数组:
a6 = np.empty((2,2))
和zeros_like函数一样,empty_like函数也会复制的数组的形状,但填充值是随机的:
a6_like = np.empty_like(a6)
1.6 使用eye函数
eye函数会创建一个的二维数组,其对角线元素值为1,其余元素值为0。
仅传入1个参数N时,默认返回数组就是N行N列,对角线上的值全部为1:
a7 = np.eye(3)
你也可以传入第二个参数,显式指定数组的列数,例如3行4列:
a8 = np.eye(3,4)
1.7 使用linspace函数
linspace函数会在两个数字之间,选择指定个数的数字,数字间的间隔相同(通过个数计算),并最终返回一个数组对象。
在从0到10之间选择6个数字,相邻的元素间隔相同:
a9 = np.linspace(0, 10, 6) # 0, 10, 6 分别对应开始,结束,元素个数
1.8 使用copy函数
对于任何数组对象,你都可以使用copy函数来返回一个相同的数组对象:
a10 = np.copy(a9)
二、从python序列对象转换
array函数可以将序列类型的python对象转换成NumPy数组。
例如,将列表对象转换为numpy数组:
a11 = np.array([1,2,3,4])
你也可以通过变量名来完成转换,示例将一个元组转换为数组:
tuple = (5,6,7,8)
a12 = np.array(tuple)
对于多维数组,你需要自己完成嵌套的编写,示例将生成一个二维数组:
list1 = [(1,2,3), (4,5,6), (7,8,9)] # 元组组成的列表
a13 = np.array(list1)
三、使用库函数
有一些库经常被用来初始化生成函数,例如random库,下面为random库几个常用的函数。
np.random.randint可以在指定区间生成随机整数,下面示例会在半开区间[0,10)随机选择整数,配合size参数可以生成指定形状的数组,size=5表示挑选5个整数,生成一维数组:
ar1 = np.random.randint(10, size=5) # 在区间[0,10) 即0-9,随机挑选整数,生成的一维数组
使用两个整数参数可以指定整数区间的上下限(上限不包含),这里并使用size指定生成一个3*3的数组:
ar2 = np.random.randint(90, 100, size=(3,3)) # 在90-99(不含上限100)挑选整数,生成3*3的数组
np.random.rand() 产生[0,1)的随机数,参数为数组的形状,例如,生成2行3列的数组:
ar3 = np.random.rand(2,3)
np.random.randn() 产生[0,1)的随机数,但是数值符合正态分布:
ar4 = np.random.randn(3,4)
四、从文件读取数据
NumPy提供的fromfile函数可以直接从文件中读取数据,并转换为数组对象,文件可以是二进制或者文本格式,fromfile还有一个对应的函数tofile,可以将数组对象写入文件。
我们先用tofile将一个数组写入文件array.bin,写入过程中你可以使用sep参数来指定分隔符:
a = np.arange(9)
a.tofile('array.bin')
再使用fromfile函数,将这个数组从文件读回来,注意读取时默认的数据类型是float,会导致错误,必须显式使用dtype=int来指定以整型的方式读取:
b = np.fromfile('array.bin', dtype=int)
五、从字符串或缓冲区创建
使用fromstring函数可以将python字符串直接转换为numpy数组,下面示例将2个字符串转换为数组,参数sep指定了元素的分隔符:
a_str1 = np.fromstring('1 2 3', sep=' ') # 元素以空格分隔
a_str2 = np.fromstring('1,2,3', sep=',') # 元素以逗号分隔
使用frombuffer函数可以将缓冲区的内容转换为numpy数组,先创建一个字符串缓冲区,然后转换为数组。dtype='S1’表示缓冲区每个字符都转换为1个字节的字符串:
buf_str = b'Hello, world!'
a_buf = np.frombuffer(buf_str, dtype='S1')
以上即是NumPy中常用的数组创建方法总结,熟悉各类创建方法是使用NumPy的基础。
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj