NumPy创建ndarray数组大揭秘

2024-04-03 00:20

本文主要是介绍NumPy创建ndarray数组大揭秘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.使用 np.array() 创建

  • 使用 np.array() 由 python list 创建

n = np.array(list)
  • 注意

    • numpy 默认 ndarray 的所有元素的类型是相同的

    • 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str > float > int

    • ndarray 的常见数据类型:

      • int:int8、uint8、int16、int32、int64

      • float:float16、float32、float64

      • str:字符串

l = [1,4,2,3,5,6]n = np.array(l)n# 执行结果array([1, 4, 2, 3, 5, 6])# 类型type(n)# 执行结果numpy.ndarray# 形状n.shape# l.shape # 列表没有shape# 执行结果(6,)# 优先级:str > float > int# n = np.array([3.14,2])n = np.array([3.14,2,"hello"])n# 执行结果array(['3.14', '2', 'hello'], dtype='<U32')

2.使用 np 的常规函数创建

(1)np.ones(shape,dtype=None,order='C')

  • 创建一个所有元素为1的多维数组

  • 参数说明:

    • shape:形状

    • dtpye=None:元素类型

    • order:{'C','F'},可选,默认值:C 是否在内存总以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据,一般默认即可

n = np.ones(shape=(3,))n# 执行结果array([1., 1., 1.])n = np.ones(shape=(3,4))n# 执行结果array([[1., 1., 1., 1.],       [1., 1., 1., 1.],       [1., 1., 1., 1.]])n = np.ones(shape=(3,4),dtype=np.int16)n# 执行结果array([[1, 1, 1, 1],       [1, 1, 1, 1],       [1, 1, 1, 1]], dtype=int16)       n = np.ones(shape=(3,4,5),dtype=np.int16)n# 执行结果array([[[1, 1, 1, 1, 1],        [1, 1, 1, 1, 1],        [1, 1, 1, 1, 1],        [1, 1, 1, 1, 1]],       [[1, 1, 1, 1, 1],        [1, 1, 1, 1, 1],        [1, 1, 1, 1, 1],        [1, 1, 1, 1, 1]],       [[1, 1, 1, 1, 1],        [1, 1, 1, 1, 1],        [1, 1, 1, 1, 1],        [1, 1, 1, 1, 1]]], dtype=int16)

(2)np.zeros(shape,dtype=float,order='C')

  • 创建一个所有元素读为0的多维数组

  • 参数说明

    • shape:形状

    • dtype=None:元素形状

n = np.zeros((5,5),dtype=np.int16)n# 执行结果array([[0, 0, 0, 0, 0],       [0, 0, 0, 0, 0],       [0, 0, 0, 0, 0],       [0, 0, 0, 0, 0],       [0, 0, 0, 0, 0]], dtype=int16)

(3)np.full(shape,full_value,dtype=None,order='C')

  • 创建一个所有元素都为指定元素的多维数组

  • 参数说明:

    • shape:形状

    • fill_value:填充值

    • dtype=None:元素类型

n = np.full(shape=(3,4),fill_value=8,dtype=np.int16)n# 执行结果array([[8, 8, 8, 8],       [8, 8, 8, 8],       [8, 8, 8, 8]], dtype=int16)

(4)np.eye(N,M=None,k=0,dtype=float)

  • 对角线为1其他的位置为0的二维数组

  • 参数说明:

    • N:行数

    • M:列数,默认为None,表示和行数一样

    • k=0:向右偏移0个位置

    • dtype=None:元素类型

# 对角线为1其他的位置为0的二维数组# 单位矩阵:主对角线都是1,其他都是0n = np.eye(6)n# 执行结果array([[1., 0., 0., 0., 0., 0.],       [0., 1., 0., 0., 0., 0.],       [0., 0., 1., 0., 0., 0.],       [0., 0., 0., 1., 0., 0.],       [0., 0., 0., 0., 1., 0.],       [0., 0., 0., 0., 0., 1.]])n = np.eye(6,6)n# 执行结果array([[1., 0., 0., 0., 0., 0.],       [0., 1., 0., 0., 0., 0.],       [0., 0., 1., 0., 0., 0.],       [0., 0., 0., 1., 0., 0.],       [0., 0., 0., 0., 1., 0.],       [0., 0., 0., 0., 0., 1.]])n = np.eye(6,9,dtype=np.int8)n# 执行结果array([[1, 0, 0, 0, 0, 0, 0, 0, 0],       [0, 1, 0, 0, 0, 0, 0, 0, 0],       [0, 0, 1, 0, 0, 0, 0, 0, 0],       [0, 0, 0, 1, 0, 0, 0, 0, 0],       [0, 0, 0, 0, 1, 0, 0, 0, 0],       [0, 0, 0, 0, 0, 1, 0, 0, 0]], dtype=int8)# k=2:向右偏移2个位置n = np.eye(6,6,k=2,dtype=np.int8)n#执行结果array([[0, 0, 1, 0, 0, 0],       [0, 0, 0, 1, 0, 0],       [0, 0, 0, 0, 1, 0],       [0, 0, 0, 0, 0, 1],       [0, 0, 0, 0, 0, 0],       [0, 0, 0, 0, 0, 0]], dtype=int8)       # k=-2:向左偏移2个位置n = np.eye(6,6,k=-2,dtype=np.int8)n# 执行结果array([[0, 0, 0, 0, 0, 0],       [0, 0, 0, 0, 0, 0],       [1, 0, 0, 0, 0, 0],       [0, 1, 0, 0, 0, 0],       [0, 0, 1, 0, 0, 0],       [0, 0, 0, 1, 0, 0]], dtype=int8)

(5)np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)

  • 创建一个等差数列

  • 参数说明:

    • start:开始值

    • stop:结束值

    • num=50:等差数列中默认有50个数

    • endpoint=True:是否包含结束值

    • retstep=False:是否返回等差值(步长)

    • dtype=None:元素类型

# 等差数列:1,3,5,7,9......n = np.linspace(1,99,num=50,dtype=np.int16)n# 执行结果array([ 1,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33,       35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67,       69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99],      dtype=int16)      # 不包含结束值n = np.linspace(1,99,num=50,dtype=np.int16,endpoint=False)n# 执行结果array([ 1,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,       34, 36, 38, 40, 42, 44, 46, 48, 50, 51, 53, 55, 57, 59, 61, 63, 65,       67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97],      dtype=int16)      # retstep=True:显示步长n = np.linspace(1,99,num=50,dtype=np.int16,retstep=True)n# 执行结果(array([ 1,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33,        35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67,        69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99],       dtype=int16), 2.0)

(6)np.arange([start,]stop,[step,]dtype=None)

  • 创建一个数值范围的数组

  • 和 Python 中 range 功能类型

  • 参数说明:

    • start:开始值(可选)

    • stop:结束值(不包含)

    • step:步长(可选)

    • dtype=None:元素类型

# 不包含结束值n = np.arange(10)n# 执行结果array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])# 设置开始值n = np.arange(2,10)n# 执行结果array([2, 3, 4, 5, 6, 7, 8, 9])# 设置步长n = np.arange(2,10,2)n# 执行结果array([2, 4, 6, 8])

(7)np.random.randint(low,high=None,size=None,dtype='I')

  • 创建一个随机整数的多维数组

  • 参数说明:

    • low:最小值

    • high=None:最大值

      • high=None时,生成的数值在【0,low)区间内

      • 如果使用high这个值,则生成的数值在【low,high)区间

    • size=None:数组形状,默认只输出一个随机数

    • dtype=None:元素类型b

# 随机整数,范围:[0,3)n = np.random.randint(3)n# 执行结果2# 随机整数,范围:[3,10)n = np.random.randint(3,10)n# 执行结果7# 随机整数:一维数组n = np.random.randint(3,10,size=6)n# 执行结果array([3, 9, 9, 9, 3, 5])# 随机整数:二维数组n = np.random.randint(3,10,size=(3,4))n# 执行结果array([[6, 6, 4, 7],       [7, 8, 3, 7],       [5, 9, 7, 6]])       # 随机整数:三维数组n = np.random.randint(3,10,size=(3,4,5))n# 执行结果array([[[3, 6, 8, 6, 3],        [3, 5, 3, 5, 9],        [5, 7, 5, 6, 8],        [5, 5, 5, 9, 9]],       [[5, 5, 3, 6, 9],        [8, 8, 7, 8, 9],        [6, 5, 7, 5, 3],        [8, 5, 3, 4, 8]],       [[5, 7, 3, 3, 8],        [5, 9, 9, 9, 4],        [3, 6, 3, 4, 9],        [5, 7, 7, 4, 5]]])        # 随机整数:三维数组n = np.random.randint(0,256,size=(20,40,3))nplt.imshow(n)# 执行结果<matplotlib.image.AxesImage at 0x19507854a90>

(8)np.random.randn(d0,d1,...,dn)

  • 创建一个服从标准正态分布的多维数组

    • 标准正态分布又称为 u 分布,是以 0 为均数,以 1 为标准差的正态分布,记为 N(0,1)标准正态分布,在 0 左右出现的概率最大,越远离出现的概率越低

  • 创建一个所有元素为 1 的多维数组

  • 参数说明:

    • dn:第 n 个维度的数值

n = np.random.randn()n# 执行结果-0.3152803212777383n = np.random.randn(10)n# 执行结果array([-1.08674923, -0.84266234,  0.48315194, -0.27384792, -0.22261324,        0.35111371,  1.63799966, -0.74853446,  0.52026937,  0.03269324])n = np.random.randn(3,4)n# 执行结果array([[ 0.05467138,  0.71906585,  1.71433002,  0.68904993],       [-1.17094149, -0.95344073,  0.76602977, -1.22046271],       [ 1.45891993,  1.40378872, -0.89364469, -1.29611593]])

(9)np.random.normal(loc=0.0,scale=1.0,size=None)

  • 创建一个服从正态分布的多维数组

  • 参数说明:

    • loc=0.0:均值,对应着正态分布的中心

    • scale:标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,scale越小,曲线越高瘦

    • size=None:数组形状

n = np.random.normal(loc=100)n# 执行结果98.54896577995035n = np.random.normal(loc=100,scale=10)n# 执行结果109.93226548891414n = np.random.normal(loc=100,scale=10,size=(3,4))n# 执行结果array([[106.55863188,  99.7947272 ,  92.6754544 ,  83.47585069],       [104.12500667, 109.83623019,  96.68665303,  96.47597136],       [ 90.24713131,  90.28364275,  93.38309007,  83.58287443]])

(10)np.random.random(size=None)

  • 创建一个元素为 0-1(左闭右开)的随机数的多维数组

  • 参数说明:

    • size=None:数组形状

n = np.random.random()n# 执行结果0.31199272530455857n = np.random.random(size=(3,4))n# 执行结果array([[0.08444408, 0.07450235, 0.88522599, 0.86113378],       [0.82065362, 0.97504932, 0.65321015, 0.96921815],       [0.95734724, 0.17062751, 0.58630317, 0.62395388]])

(11)np.random.rand(d0,d1,...,dn)

  • 创建一个元素为 0-1(左闭右开)的随机数的多维数组

  • 和 np.random.random 功能类似,掌握其中一个即可

  • 参数说明:

    • dn:第 n 个维度的数值

n = np.random.rand()n# 执行结果0.03291695735466904n = np.random.rand(3,4)n# 执行结果array([[0.15867292, 0.85912693, 0.67912155, 0.95042762],       [0.84022126, 0.85000877, 0.06752424, 0.71760504],       [0.97089325, 0.86010712, 0.77839465, 0.44999928]])

这篇关于NumPy创建ndarray数组大揭秘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/871449

相关文章

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优