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查询JSON数组字段包含特定字符串的方法

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

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

python如何创建等差数列

《python如何创建等差数列》:本文主要介绍python如何创建等差数列的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python创建等差数列例题运行代码回车输出结果总结python创建等差数列import numpy as np x=int(in

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Macos创建python虚拟环境的详细步骤教学

《Macos创建python虚拟环境的详细步骤教学》在macOS上创建Python虚拟环境主要通过Python内置的venv模块实现,也可使用第三方工具如virtualenv,下面小编来和大家简单聊聊... 目录一、使用 python 内置 venv 模块(推荐)二、使用 virtualenv(兼容旧版 P