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

相关文章

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt