首页 > 其他分享 >掌握Numpy数组对象ndarray

掌握Numpy数组对象ndarray

时间:2024-06-19 17:01:54浏览次数:15  
标签:表示 函数 创建 元素 数据类型 数组 Numpy ndarray

Python提供了一个array模块。array和list不同,array直接保存数值,和C语言的一维数组比较类似。但是由于Python的array模块不支持多维,也没有各种运算函数,因此不适合做数值运算。NumPy弥补了Python不支持多维等不足之处,它提供了一种存储单一数据类型的多维数组--ndarray。本次将实现ndarray多维数组的创建、生成随机数、通过索引访问一维或多维数组并变换其形态。

一、创建数组对象

NumPy提供了两种基本的对象:ndarray(N-dimensional  Array)和ufunc(Universal Function)。ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。在NumPy中,维度称为轴。

1.数组属性

为了更好地理解和使用数组,在创建数组之前,了解数组的基本属性是十分有必要的。数组的属性及其说明如图所示。

属性名称属性说明
ndim返回int。表示数组的维数
shape返回tuple。表示数组形状,对于n行m列的矩阵,形状为(n,m)
size返回int。表示数组的元素总数,等于数组形状中各元素的积
dtype

返回data-type。表示数组中元素的数据类型

itemsize

返回int。表示数组的每个元素的存储空间(以B为单位)。例如,一个元素类型为float64的数组的itemsize属性值为8(float64占用64bit,1B为8bit,所以float64,占用8B)。一个元素类型为complex32的数组的itemsize属性值为4

2.数组创建

(1)Numpy提供的array函数可以创建一维或多维数组,其基本使用格式如下:
numpy.array(object,dtype=None, *,copy=True,order='k',subok=False,ndmin=0,like=None)
(2)array函数的主要参数及其说明如图所示:
参数名称参数说明
object接收array_like。表示所需创建的数组对象。无默认值
dtype接收data-type。表示数组所需的数组类型,如果未给定,那么选择保存对象所需的最小的数据类型。默认为None
ndmin接收int。用于指定生成数组应该具有的最小维数。默认为0
(3) 创建一维数组与多维数组并查看数组属性的过程,如图所示:

代码1-1

代码1-1

在代码1-1中,数组data只有一行元素,因此它是一维数组。而数组data2有3行4列元素,因此它是二维数组,第0轴的长度为3(即行数),第1轴的长度为4(即列数)。其中,第0轴也称横轴,第1轴也称纵轴。还可以通过修改数组的shape属性,在保持数组元素个数不变的情况下改变数组每个轴的长度。

代码1-2

代码1-2将数组data2的shape改为(4,3)。注意,从(3,4)改为(4,3)并不是对数组进行转置,而是改变每个轴的长度,数组元素的顺序并没有改变。 

代码2-1中的例子先创建了一个Python序列,然后通过array函数将其转换为数组,通过此方法创建数组显然效率不高。因此Numpy提供了很多专门用于创建数组的函数。

(4)除了使用array函数创建数组之外,还可以使用arange函数创建数组。arange函数类似于Python自带的函数range,通过指定开始值、终值和步长来创建一维数组,创建的数组不含终值。arange函数的基本使用格式如下:
numpy.arange([start,]stop,[step,]dtype=None,*,like=None)
(5)arange函数的常用参数及其说明如表所示:
参数名称参数说明
start接收int或实数。表示数组的开始值,生成的数组包括该值。默认为0
stop接收int或实数。表示数组的终值,生成的数组不包括该值。无默认值
step接收int或实数。表示在数组中,值之间的步长。默认为1
dtype接收数据类型。表示输出数组的类型。默认为None
 (6)使用arange函数创建数组如代码1-3所示:

代码1-3

(7)linspace函数通过指定开始值、终值和元素个数来创建一维数组,默认包括终值,这一点需要和arange函数区分。linspace函数的基本使用格式如下:
numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None,axis=0)
(8) linspace函数的常用参数及其说明:
参数名称参数说明
start接收array_like。表示起始值。无默认值
stop接收array_like。表示终值。无默认值
num接收int。表示生成的样本数。默认为50
dtype接收数据类型。表示输出数组的类型。默认为None
(9)使用linspace函数创建数组如代码所示:

(10)logspace函数和linspace函数类似,但它创建的数组是等比数列。logspace函数的基本 使用格式如下:
numpy.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None,axis=0)

       在logspace函数的参数中,除了base参数和linspace函数的retstep参数不同之外,其余均相同。base参数可用于设置日志空间的底数,在不设置的情况下,默认以10为底。

     (11)  使用logspace函数生成1-100的20个元素的等比数列,如图所示:

Numpy还提供了其他函数,用于创建特殊数组,如zeros、eye、diag和ones函数等。

(12)其中,zeros函数用于创建元素全部为0的数组,即将创建的数组的元素全部填充为0,如图所示:

 

(13)eye函数用于生成主对角线上的元素为1、其他元素为0的二维数组,类似单位矩阵,如图所示:

 

 (14)diag函数创建类似对角矩阵的数组,即除对角线上的元素以外的其他元素都为0,对角线上的元素可以是0或其他值,如图所示:

(15)ones函数用于创建元素全部为1的数组,即将创建的数组的元素全部填充为1,如图所示:

 

3.数组数据类型

在实际的业务数据处理中,为了更准确地计算结果,需要使用不同精度的数据类型。NumPy极大程度地扩充了原生Python的数据类型。同时需要强调一点,在Numpy中,数组的数据类型是同质的,即数组中所有元素的数据类型必须是一致的。将元素数据类型保持一致可以更容易确定数组所需要的存储空间。NumPy的基本数据类型及其取值范围,如图所示。

类型描述
bool用1位存储的布尔值(值为True或False)
inti表示由所在平台决定其精度的整数(一般为int32或int64)
int8表示整数,范围为-128~127
int16表示整数,范围为-32768~32767
int32表示整数,范围为-2³¹~2³¹-1
int64表示整数,范围为-2
uint8表示无符号整数,范围为0~255
uint16表示无符号整数,范围为0~65535
uint32表示无符号整数,范围为0~2³²-1
uint64表示无符号整数,范围为0~2
float16表示半精度浮点数(16位),其中用1位表示正负,用5位表示整数,用10位表示尾数
float32表示单精度浮点数(32位),其中用1位表示正负,用8位表示整数,用23位表示尾数
float64或float表示双精度浮点数(64位),其中用1位表示正负,用11位表示整数,用52位表示尾数
complex64表示复数,分别用两个32位浮点数表示实部和虚部
complex128或complex表示复数,分别用两个64位浮点数表示实部和虚部

 Numpy数组中的每一种数据类型均有其对应的转换函数,如图所示:

       为了更好地帮助读者理解数据类型,下面将创建一个用于存储餐饮企业库存信息的数据类型。其中,用一个能存储40个字符的字符串来记录商品的名称,用一个64位的整数来记录商品的库存数量,最后用一个64位的单精度浮点数来记录商品的价格,具体步骤如下。 

(1)创建数据类型,如图所示:

 

(2)查看数据类型 

可以直接查看或使用Numpy中的dtype属性进行查看,如图所示:

(3)在使用array函数创建数组时,数组的数据类型默认是浮点型。若需要自定义数组数据,则可以预先指定数据类型,如图所示:

 

标签:表示,函数,创建,元素,数据类型,数组,Numpy,ndarray
From: https://blog.csdn.net/2301_81437523/article/details/139797464

相关文章

  • React之类组件与函数组件的区别
         类组件和函数组件在React中是两种定义UI组件的方式,它们在语法、生命周期方法、状态管理等方面存在一些差异函数组件定义:函数组件是通过一个普通的JavaScript函数定义的,接受props作为参数,并返回一个React元素。特点:简洁、易于阅读和测试。无法使用生命......
  • Visual Studio + Qt项目 数组超界不会报错。 堆栈 Cookie 检测代码检测到基于堆栈
    使用vs+Qt项目时,数组超界不会崩溃和报错的问题。 开启以下2个即可。  注意:1.启用了地址擦除系统会造成QT的异常崩溃,原因未知。2.有时会报cookie的错误,数组超界了,在退出函数时才会报错。   ......
  • java object多大 java对象内存模型 数组有多长(八)多线程
    在javaobject多大java对象内存模型数组有多长(四)已经访问的对象记录优化中,用byte数组处理,现在它将暴露在多线程中 1对byte数组加volatile2可见性:用Unsafe控制ConcurrentHashMap内并发数组元素的可见性中的方法来byte数组元素的读写 原子性1)compareandsetbyte 2......
  • LeetCode80. 删除有序数组中的重复项 II题解
    LeetCode80.删除有序数组中的重复项II题解题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/题目描述:给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数......
  • LeetCode26. 删除有序数组中的重复项题解
    LeetCode26.删除有序数组中的重复项题解题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array题目描述:给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一......
  • Vue 3中的reactive:响应式对象和数组
    ......
  • 编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并
    编写函数intfun(intlim,intaa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数。#include<stdio.h>#defineMAX100intisPrime(intnum){if(num<2){return0;}for(inti=2;i*i<=num;......
  • NumPy 双曲函数与集合操作详解
    NumPy双曲函数NumPy提供了sinh()、cosh()和tanh()等ufunc,它们接受弧度值并生成相应的双曲正弦、双曲余弦和双曲正切值。示例:importnumpyasnpx=np.sinh(np.pi/2)print(x)示例找到数组arr中所有值的双曲余弦值:importnumpyasnparr=np.array([n......
  • 数组趣味玩法:在Java SE中尝试创新玩法
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的......
  • 深入探究:Java SE中的数组高级用法
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的......