2、NumPy数组的数据类型

2、NumPy数组的数据类型,第1张

NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:①实际的数据;②描述这些数据的元数据。

NumPy数组一般是同质的,数组中的所有元素类型必须是一致的,有利于确定存储空间大小。nparange函数创造了一组数组的一维数组:

nparray函数创造了多维数组:

指定数组的数据类型:

numpy 是使用python进行数据分析不可或缺的第三方库,非常多的科学计算工具都是基于 numpy 进行开发的。

ndarray对象是用于存放同类型元素的多维数组,是numpy中的基本对象之一,另一个是func对象。本文主要内容是: 1 、简单介绍ndarray对象 2、ndarray对象的常用属性 3、如何创建ndarray对象 4、ndarray元素访问

它的维度以及个维度上的元素个数由 shape 决定。

标题中的函数就是numpy的构造函数,我们可以使用这个函数创建一个ndarray对象。构造函数有如下几个可选参数:

实例:

接下来介绍ndarray对象最常用的属性

实例:

使用 array 函数,从常规的python列表或者元组中创建数组,元素的类型由原序列中的元素类型确定。

实例:

subok 为 True ,并且object是ndarray子类时(比如矩阵类型),返回的数组保留子类类型

某些时候,我们在创建数组之前已经确定了数组的维度以及各维度的长度。这时我们就可以使用numpy内建的一些函数来创建ndarray。

例如:函数 ones 创建一个全1的数组、函数 zeros 创建一个全0的数组、函数 empty 创建一个内容随机的数组,在默认情况下,用这些函数创建的数组的类型都是float64,若需要指定数据类型,只需要闲置 dtype 参数即可:

上述三个函数还有三个从已知的数组中,创建 shape 相同的多维数组: ones_like 、 zeros_like 、 empty_like ,用法如下:

除了上述几个用于创建数组的函数,还有如下几个特殊的函数:

特别地, eye 函数的全1的对角线位置有参数k确定

用法如下:

除了上面两个函数还有其他几个类似的从外部获取数据并创建ndarray,比如: frombuffer 、 fromfile 、 fromiter ,还没用过,等用到了在详细记录

ndarray提供了一些创建二维数组的特殊函数。numpy中matrix是对二维数组ndarray进行了封装之后的子类。这里介绍的关于二维数组的创建,返回的依旧是一个ndarray对象,而不是matrix子类。关于matrix的创建和 *** 作,待后续笔记详细描述。为了表述方便,下面依旧使用 矩阵 这一次来表示创建的二维数组。

对于一维的ndarray可以使用python访问内置list的方式进行访问:整数索引、切片、迭代等方式

关于ndarray切片

与内置list切片类似,形式:

array[beg:end:step]

beg: 开始索引

end: 结束索引(不包含这个元素)

step: 间隔

需要注意的是

特别注意的是,ndarray中的切片返回的数组中的元素是原数组元素的索引,对返回数组元素进行修改会影响原数组的值

除了上述与list相似的访问元素的方式,ndarray有一种通过 列表 来指定要从ndarray中获取元素的索引,例如:

多维ndarray中,每一维都叫一个轴axis。在ndarray中轴axis是非常重要的,有很多对于ndarray对象的运算都是基于axis进行,比如sum、mean等都会有一个axis参数(针对对这个轴axis进行某些运算 *** 作),后续将会详细介绍。

对于多维数组,因为每一个轴都有一个索引,所以这些索引由逗号进行分割,例如:

需要注意的是

多维数组的迭代

可以使用ndarray的 flat 属性迭代数组中每一个元素

参考 Xarray官方文档 , Python气象数据处理进阶之Xarray(1):Xarray的数据结构

在Xarray中,数据是由结构和标签的,分为以下几种:

1DataArray:

带有标注或命名维度的多维数组。DataArray将metadata(例如:维名称,坐标和属性)添加到基础的 未标记 的数据结构,例如numpy和Dask数组。

2Datasets:

具有类似字典结构的尺寸对其的DataArray对象的 集合 。因此,可以在单个DataArray的维度上执行的大多数 *** 作都可以在Dataset上执行。

Dataset是多个DataArray的集合

3Variable:

类似于NetCDF的变量。由dimensions,data和attributes组成。variable和numpy数组之间的主要功能区别在于,对variable的数字运算可以通过 维名称 实现数组广播。

通俗的讲,variables < DataArray < Dataset (<指包含于)。这种解释不完全正确,但是初学者可以这样理解。

Xarray通过对维命名的 *** 作实现数据筛选和处理,实现数据的标记和命名通过以下几个定义实现:

Dimension : 每一轴的维名称(eg,('x','y','z'))。

Coordinate : 坐标或刻度。类似于字典的序列,将每个点标记。比如说dimension是纬度,那么对应的coordinate就是纬度坐标(90°N,89°N,88°N……89°S,90°S)。

Index : 索引号,也可以说是位置标号。a[0]代表a数组的一个数,0就是index。

可以看到,该文件是一个Datasets,里面含有变量:Data Variables,数据集的维度有经度纬度和时间,各自有各自的坐标Coordinates,同样数据集还有一些属性来表明数据集信息。

我们可以通过:

来分别查看数据集中包含的变量,维,坐标。

再比如NCEP的位势高度资料:

基本同上。

需要说明的是,ncl数据中存在short格式,在读取时需要使用short2flt()函数,但是在Python中不存在short格式,默认均为float,无需考虑这一点。

有时我们通过其他手段读取了相关数据,但是数据是nparray格式的,我们需要将其转换为DataArray,亦或我们需要输出一个NC文件,需要将计算后的数组转为DataArray格式,这就用到了创建的方法。

1Data: 数据,可以是numpy ndarray,series,DataFrame,pandaspanel等格式

2coords: 坐标列表或字典

如果是列表,则应为元组列表。其中第一个元素为dimension name,第二个元素是对应的坐标array_like对象。

用字典格式比较好

3dims: 维名称列表

如果省略,并且coords是元组列表,则维度名称取自coords。

4attrs: 属性

5names: 变量名

以上,除了data外,都不是必须的。

创建示例如下:

上面提到,除了data以外,其他都是不必要的

如果是从一个DataFrame数据转化为DataArray的话(这种 *** 作通常是为了将Pandas和Xarray联合使用):

会自动识别行列的名称和序号。

官方文档还有更复杂的例子,需要的话再去官网查看。

在创建了数据之后,我们同样可以使用相关的 *** 作获取DataArray的各种信息:

如果想对DataArray的值修改可以通过以下两种方法:

两种结果是等价的,但官方只给出了第一种方法。

通过指令 foorename('temperature') 改名,比如通过hgt计算得到了一个新变量,需要改名,就可以用这个指令。

在得到一个DataArray后,用于画图时,比如我们需要获取它的经度和纬度(在这里,刚刚的例子是时间和高度),那么可以直接通过

这两种方式取出坐标信息。

要修改或者删除某坐标信息的话,原理和修改数据是一样的:

官网给出一个以气候数据为例的Dataset结构:

<center>

</center>

一个数据集,包含了数据主体(Temperature,Precipitation),维度坐标(latitude,longitude)。

根据官网的例子,一个Dataset是这样创建的,实际上与DataArray类似:

实际上这个例子与我们通常接触的不太一样,因为大部分数据的lat和lon都是一维的。

对Dataset的 *** 作和DataArray基本一致,不再重复。

本文介绍几个常用的Python基本包

在科学计算中,常用的python包有:Numpy, Pandas, Matplotlib,Pandas, SciPy, Scikt-Learn。他们的关系如下图所示:

参考文献

NumPy是一个同构多维数组(通常是数字),数组内所有类型都相同。NumPy维度中称为轴 。

NumPy中的数组类是 ndarray ,别名 array 。

注:nparange使用浮点参数时,由于有限的浮点精度,通常不可能预测所获得的元素的数量。出于这个原因,通常最好使用nplinspace函数来接收我们想要的元素数量的函数,而不是步长(step):

乘积运算符 在NumPy数组中按元素进行运算。矩阵乘积可以使用@运算符(版本>= 35)或dot函数。

reshape函数返回带有修改形状的参数,而该resize方法会修改数组本身

这里 ravel() 使用C语言风格,也就是说,最右边的索引“变化最快”,因此[0,0]之后的元素是[0,1] 。

一维数组

二维数组

堆叠

此外,可以使用"r_"和"c_",(在默认行为上类似于 "vstack"和 "hstack")来创建数组,他们的优点是可以使用参数编号。

注意: 使用“c_”、“r_”时,每个“元素”的列、行数要相等;

拆分

同样 还有"vsplit()"沿垂直轴分割。

View

广播用来处理不同形状的输入。

花式引索

bool 引索

ix_()函数

用于组合多种变量,下例中将a b c 向量混合成(4,3,5)的三维矩阵。(Construct an open mesh from multiple sequences)

线性代数

使用numpy文件夹中的linalgpy

官网介绍

Pandas 是Python的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。

Pandas 数据结构就像是低维数据的容器。比如,DataFrame 是 Series 的容器,Series 则是标量的容器。

python

list1 = [0]5

list2 = [i for i in range(5)]

list3 = [[i for i in range(5)] for j in range(5)]

如果没有参数min()返回一个标量,如果有参数0表示返回每一列中最小标量所组成的数组,1表示返回每一行中最小标量所组成的数组

max相反

>>> a = array([[1,2,3],[4,5,6]])

>>> a

array([[1, 2, 3],

      [4, 5, 6]])

>>> amin()

1

>>> amax()

6

>>> amin(0)

array([1, 2, 3])

>>> amax(0)

array([4, 5, 6])

>>> amin(1)

array([1, 4])

>>> amax(1)

array([3, 6])

foreach遍历数组的好是可以不知道数组的长度从而读出数组的key,name出来了,在php的foreach中有两种方法,arr_name as $value 和arr_name as $key => $value了

以上就是关于2、NumPy数组的数据类型全部的内容,包括:2、NumPy数组的数据类型、numpy基础——ndarray对象、[Xarray] 1. 数据结构等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10168251.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存