NumPy 学习:创建数组
NumPy提供了多维数据组对象,包中最核心的类型是ndarray,封装了python原生的 n 维数组,数组元素的类型是相同的,能够用于执行矢量算术运算,无需编写循环结构,就能对整个数组进行批量运算。在通常情况下,需要导入NumPy,并设置别名为np。
import numpy as np
Numpy的array class 叫做ndarray,别名是array,ndarray对象有如下特征:
- ndarray对象在创建时有固定的大小,更改ndarray的大小将创建一个新数组并删除原始数组。
- ndarray对象中的元素类型是相同的,在内存中的大小相同。
- ndarry有助于对大量数据进行高级数学运算和其他类型的运算。
一,创建ndarray
ndarray是N-Dimension-Array的简称,该对象是一个快速而灵活的大数据集容器,该容器中存储的元素的数据类型都是相同的。
numpy支持通过已有的数据来创建ndarray,array()和asarray()都可以把结构化的数据转化为 ndarray,但是array()和asarray()的主要区别是当数据源是ndarray 时,array()仍然会 copy 出一个副本,占用新的内存。但是,如果不改变 dtype, asarray()不会创建新的副本。
创建数组的方法通常有:
- 从其他Python结构(例如,列表,元组)转换
- 通过增长序列来创建数组
- 通过sharp或value(例如,ones、zeros等)创建
1,从已有的array-like对象(list,tuple)转换为Numpy数组
在Python中排列成array-like结构的数值数据可以通过使用array()函数转换为数组,例如列表和元组。
a1 = np.array([1,2,3,4,5]) #1row * 5col a2 = np.array([[1,2,3,4,5] ,[6,7,8,9,10]])# 2row * 5col
通过array()函数,使用列表创建的是一维数组,使用嵌套的列表创建的是多维数组。
numpy.array()函数的定义:
numpy.array(object, dtype=None)
参数注释:
object:array-like的数据对象,例如list,tuple
dtype:数组元组的类型,如果没有指定,那么是哦那个最小size的类型来存储数据。
2,通过增长序列来创建数组
通过arange()函数创建一维数组,数组的元素是一个序列,默认值start=0,不包括stop,step=1。
numpy.arange([start, ]stop, [step, ]dtype=None)
numpy.arange()的用法示例:
a = np.arange(10) #default start=0, end=10(exclude 10),step=1 # [0 1 2 3 4 5 6 7 8 9] a1 = np.arange(5,10) # start=5, end=10(exclude=10),step=1 # [5 6 7 8 9] a2 = np.arange(5,20,2) # start=5, end=20(exclude 20),step=2 #[ 5 7 9 11 13 15 17 19]
可以使用reshape()函数重塑ndarray数组的shape,把12个元素的一维数组转换为3行4列的二维数组:
>>> np.arange(12).reshape(3,4) array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
3,通过内置的函数来创建数组
np.eye(n,m):用于创建n row * m col的数组,下标相同的元素值是1,下标不同的元素值是0;如果省略m,那么默认值创建的是n * n的方阵。
>>> np.eye(3) array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
np.identity(n):创建单位阵,维数由n来决定,相当于np.eye(n)。
np.diag(v):用于创建对角阵,对角阵是一个方阵,对角线上的元素值由参数v来指定:
>>> np.diag([1, 2, 3], 1) array([[0, 1, 0, 0], [0, 0, 2, 0], [0, 0, 0, 3], [0, 0, 0, 0]])
np.zeros(shape):用于创建0阵,shape参数是int或tuple,用于指定矩阵的shape,
np.zeros((2,3))
array([[ 0., 0.],
[ 0., 0.]])
np.ones(shape):用于创建元素值都为1的矩阵,shape参数是int或tuple,用于指定矩阵的shape,
np.ones((2,2)) array([[1., 1.], [1., 1.]])
二,ndarray的属性
数组对象的属性主要有:
- dtype:描述数组元素的类型
- shape:以tuple表示的数组形状
- ndim:数组的维度
- size:数组中元素的个数
1,dtype对象
dtype是一个特殊的对象,它表示数组元素的类型。下面罗列出NumPy内置的跟平台无关的常用的数据类型:
- 整数有符号系列:np.int8,np.int16,np.int32,np.int64
- 整数无符号系列:np.uint8、np.uint16、np.uint32、np.uint64
- 浮点数:np.float32、np.float64
- 布尔值:np.bool
2,shape对象
以元组形式表示一个数组的维度,前三个维度有名称:第一个维度是行,第二个维度是列,第三个维度是高
3,ndim对象
数组各个维度的元素数量
三,NumPy的数据类型
dtype(数据类型)是一个特殊的对象,具有name等属性,每一个ndarray对象都有一个dtype对象,可以通过astype()函数强制转换数据元素的类型:
>>> arr=np.array([1,2,3]) >>> arr.dtype dtype('int32') >>> arr.astype(np.uint8) array([1, 2, 3], dtype=uint8)
对于Numpy的日期时间类型
NumPy支持的日期时间类型是:np.datetime64,日期单位是年('Y'),月('M'),周('W')和天('D'), 而时间单位是小时('h'),分钟('m') ),秒('s'), 毫秒('ms')和一些额外的SI前缀基于秒的单位。 对于“非时间”值,datetime64数据类型还接受字符串“NAT”(不是时间), 以小写/大写字母的任意组合。
np.datetime64('2005-02-25')
从字符串创建日期时间数组时,仍然可以通过使用具有通用单位的日期时间类型从输入中自动选择单位。
>>> np.array(['2007-07-13', '2006-01-13', '2010-08-13'], dtype='datetime64')
array(['2007-07-13', '2006-01-13', '2010-08-13'], dtype='datetime64[D]')
np.arange()函数可以根据时间单位生成时间范围:
>>> np.arange('2005-02', '2005-03', dtype='datetime64[D]')
NumPy允许两个Datetime值相减,这个操作产生一个带有时间单位的数字。timedelta64的参数是一个数字(用于表示单位数),以及日期/时间单位,如 (D)ay, (M)onth, (Y)ear, (h)ours, (m)inutes, 或者 (s)econds。timedelta64数据类型也接受字符串“NAT”代替“非时间”值的数字。
>>> numpy.timedelta64(1, 'D')
Datetimes 和 Timedeltas 一起工作,为简单的日期时间计算提供方法。
>>> np.datetime64('2009-01-01') - np.datetime64('2008-01-01')
numpy.timedelta64(366,'D')
>>> np.datetime64('2009') + np.timedelta64(20, 'D')
numpy.datetime64('2009-01-21')
参考文档: