Python NumPy数组的创建方法

Numpy是Python中科学计算的基础包,其核心对象就是ndarray(n维数组)。利用数组可以快速执行逻辑,形状操作,统计和傅里叶变换等运算,其效率比Python原生的数组效率更高。因此使用Numpy的第一件事就是创建Numpy数组,本文总结了5种常用的创建NumPy数组方法。

文章目录

  • 一、使用NumPy内部功能函数
    • 1.1 使用arange函数
    • 1.2 创建多维数组
    • 1.3 使用zeros/zeros_like和ones/ones_like函数
    • 1.4 使用full/full_like函数
    • 1.5 使用empty/empty_like函数
    • 1.6 使用eye函数
    • 1.7 使用linspace函数
    • 1.8 使用copy函数
  • 二、从python序列对象转换
  • 三、使用库函数
  • 四、从文件读取数据
  • 五、从字符串或缓冲区创建

一、使用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的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/701282.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四川景源畅信:抖音有哪些可以做的副业?

抖音作为当前最受欢迎的短视频平台之一,其巨大的流量和用户基础为许多人提供了副业的机会。那么,在抖音上可以做哪些副业呢? 一、内容创作与推广 利用抖音平台进行内容创作是最直接的副业方式。无论是搞笑短剧、生活分享还是专业知识普及,只…

具身智能论文(四)

目录 1. Alexa Arena: A User-Centric Interactive Platform for Embodied AI2. EDGI: Equivariant Diffusion for Planning with Embodied Agents3. Efficient Policy Adaptation with Contrastive Prompt Ensemble for Embodied Agents4. Egocentric Planning for Scalable E…

【综述】人工智能、机器学习、深度学习

文章目录 前言 概念 算法 训练 性能 应用 参考资料 前言 见《初试人工智能》 概念 人工智能系统(artifieial intelligence system),针对人类定义的给定目标,产生诸如内容、预测、推荐或决策等输出的一类工程系统。该工程系…

简单的mysql主从复制搭建

文章目录 准备工作用Docker安装MySQL主库配置【192.168.13.32】从库配置【192.168.13.108】小结 准备工作 用虚拟机提前准备两台服务器,并且在服务器中分别安装好MySQL,服务器的信息如下: 数据库IP主节点192.168.13.32从节点192.168.13.108…

【前端】打砖块游戏:实现细节介绍

打砖块游戏:实现细节介绍 在本文中,我将详细介绍如何使用HTML、CSS和JavaScript技术构建一个简单的打砖块游戏。我们将重点讨论游戏的三个核心技术方面:碰撞检测、画图和事件监听。 完整代码我放在:github可以直接拉取代码测试。 游戏概览 打砖块游戏中,玩家通过控制底…

vue-cropper裁剪图片 vue

效果图 1.配置环境 npm install vue-cropper 2.代码 <template><div class"cropper-content"><div class"cropper-box"><div class"cropper"><vue-cropper ref"cropper" :img"option.img" :…

C语言中数组与指针的区别

一. 简介 本文学习了 C语言中数组与指针的区别。这样的话&#xff0c;可以在编写C代码时规避掉出错的问题。 二. C语言中数组与指针的区别 1. 数组 定义字符串数组时&#xff0c;必须让编译器知道需要多少空间。 一种方法是用足够空间的数组存储字符串。例如如下&#xf…

【Vue】更换vue-element-admin左侧 logo

准备&#xff1a;目标svg格式的 logo&#xff0c;并将目标logo命名为 vuejs-fill.svg替换路径&#xff1a;/icons 文件夹下&#xff0c;覆盖掉原本的 vuejs-fill.svg 原因&#xff1a;配置项的logo设置的是 vuejs-fill

Linux中如何配置虚拟机网络(NAT方法)

首先我们要在Linux中找到配置文件的路径/etc/sysconfig/network-scripts/&#xff0c;然后找到配置文件的名称ifcfg-xxx&#xff08;如&#xff1a;ifcfg-ens33&#xff09;&#xff0c;然后打开这个文件内 容如下&#xff1a; TYPEEthernet # 指定网卡类型是以太网 BOOTPROT…

【ARM Cortex-M 系列 2.3 -- Cortex-M7 Debug event 详细介绍】

请阅读【嵌入式开发学习必备专栏】 文章目录 Cortex-M7 Debug eventDebug events Cortex-M7 Debug event 在ARM Cortex-M7架构中&#xff0c;调试事件&#xff08;Debug Event&#xff09;是由于调试原因而触发的事件。一个调试事件会导致以下几种情况之一发生&#xff1a; 进…

高级DBA手把手教你达梦8国产数据库级联更新语句用MergeInto合并代替方法(达梦官方手册无此内容)

高级DBA手把手教你达梦8国产数据库级联更新语句用MergeInto合并代替方法&#xff08;达梦官方手册无此内容&#xff09; 一、传统级联更新语句例子 举例&#xff1a; 表 1&#xff1a;T1 字段名类型A时间类型B字符类型C字符类型D字符类型E字符类型 表 2&#xff1a;T2 字…

Web开发三层架构

##Controller Service Dao(mapper) 软件设计&#xff1a;高内聚 低耦合 Controller 调用Service&#xff0c; Service调用 DAO 模块之间耦合 如果要从EmpServiceA切换到EmpServiceB&#xff0c;Controller代码也要修改 new EmpServiceB 分层接耦 容器中放EmpServiceA&am…