Datawhale Numpy组队学习Task01打卡

Datawhale Numpy组队学习Task01打卡

常量和数据类型:

np常量 含义 备注
np.nan 表示空值 两个np.nan不相等
np.inf 表无穷大 -
np.pi 表示圆周率 -
np.e 表示自然数 -

Python 原生的数据类型相对较少, bool、int、float、str等。这在不需要关心数据在计算机中表示的所有方式的应用中是方便的。然而,对于科学计算,通常需要更多的控制。为了加以区分 numpy 在这些类型名称末尾都加了“_”。

类型 备注 说明
bool_ = bool8 8位 布尔类型
int8 = byte 8位 整型
int16 = short 16位 整型
int32 = intc 32位 整型
int_ = int64 = long = int0 = intp 64位 整型
uint8 = ubyte 8位 无符号整型
uint16 = ushort 16位 无符号整型
uint32 = uintc 32位 无符号整型
uint64 = uintp = uint0 = uint 64位 无符号整型
float16 = half 16位 浮点型
float32 = single 32位 浮点型
float_ = float64 = double 64位 浮点型
str_ = unicode_ = str0 = unicode Unicode 字符串
datetime64 日期时间类型
timedelta64 表示两个时间之间的间隔

创建数据类型

numpy的数值类型实际上是dtype对象的实例。
每个内建类型都有一个唯一定义。

class dtype(object):
	def __init__(self, obj, align=False, copy=False):
	    pass

每个内建类型都有一个唯一定义它的字符代码,如下:

字符 对应类型 备注
b boolean ‘b1’
i signed integer ‘i1’, ‘i2’, ‘i4’, ‘i8’
u unsigned integer ‘u1’, ‘u2’ ,‘u4’ ,‘u8’
f floating-point ‘f2’, ‘f4’, ‘f8’
c complex floating-point -
m timedelta64 表示两个时间之间的间隔
M datetime64 日期时间类型
O object -
S (byte-)string S3表示长度为3的字符串
U Unicode Unicode 字符串
V void -

例:

import numpy as np
a = np.dtype('b1')
print(a.type) # 
print(a.itemsize) # 1
a = np.dtype('i1')
print(a.type) # 
print(a.itemsize) # 1
a = np.dtype('i2')
print(a.type) # 
print(a.itemsize) # 2
a = np.dtype('i4')
print(a.type) # 
print(a.itemsize) # 4
a = np.dtype('i8')
print(a.type) # 
print(a.itemsize) # 8
a = np.dtype('u1')
print(a.type) # 
print(a.itemsize) # 1
a = np.dtype('u2')
print(a.type) # 
print(a.itemsize) # 2
a = np.dtype('u4')
print(a.type) # 
print(a.itemsize) # 4
a = np.dtype('u8')
print(a.type) # 
print(a.itemsize) # 8
a = np.dtype('f2')
print(a.type) # 
print(a.itemsize) # 2
a = np.dtype('f4')
print(a.type) # 
print(a.itemsize) # 4
a = np.dtype('f8')
print(a.type) # 
print(a.itemsize) # 8
a = np.dtype('S')
print(a.type) # 
print(a.itemsize) # 0
a = np.dtype('S3')
print(a.type) # 
print(a.itemsize) # 3
a = np.dtype('U3')
print(a.type) # 
print(a.itemsize) # 12

数据类型信息

Python 的浮点数通常是64位浮点数,几乎等同于 np.float64 。
NumPy和Python整数类型的行为在整数溢出方面存在显着差异,与 NumPy 不同,Python 的int 是灵活的。这意味着Python整数可以扩展以容纳任何整数并且不会溢出。

import numpy as np
ii16 = np.iinfo(np.int16)
print(ii16.min) # -32768
print(ii16.max) # 32767
ii32 = np.iinfo(np.int32)
print(ii32.min) # -2147483648
print(ii32.max) # 2147483647
import numpy as np
ff16 = np.finfo(np.float16)
print(ff16.bits) # 16
print(ff16.min) # -65500.0
print(ff16.max) # 65500.0
print(ff16.eps) # 0.000977
ff32 = np.finfo(np.float32)
print(ff32.bits) # 32
print(ff32.min) # -3.4028235e+38
print(ff32.max) # 3.4028235e+38
print(ff32.eps) # 1.1920929e-07

时间日期和时间增量

datetime64基础

在 numpy 中,我们很方便的将字符串转换成时间日期类型 datetime64 (datetime 已被 python 包含的日期时间库所占用)。datatime64 是带单位的日期时间类型,其单位如下:

日期单位 代码含义 时间单位 代码含义
Y h 小时
M m 分钟
W s
D ms 毫秒
- - us 微秒
- - ns 纳秒
- - ps 皮秒
- - fs 飞秒
- - as 阿托秒

注意:

  • 1秒 = 1000毫秒(millisenconds)
  • 1毫秒 = 1000微秒(microseconds)

例:从字符串创建 datetime64 类型时,默认情况下,numpy 会根据字符串自动选择对应的单位。

import numpy as np
a = np.datetime64('2020-03-01')
print(a, a.dtype) # 2020-03-01 datetime64[D]
a = np.datetime64('2020-03')
print(a, a.dtype) # 2020-03 datetime64[M]
a = np.datetime64('2020-03-08 20:00:05')
print(a, a.dtype) # 2020-03-08T20:00:05 datetime64[s]
a = np.datetime64('2020-03-08 20:00')
print(a, a.dtype) # 2020-03-08T20:00 datetime64[m]
a = np.datetime64('2020-03-08 20')
print(a, a.dtype) # 2020-03-08T20 datetime64[h]

例:从字符串创建 datetime64 类型时,可以强制指定使用的单位。

import numpy as np
a = np.datetime64('2020-03', 'D')
print(a, a.dtype) # 2020-03-01 datetime64[D]
a = np.datetime64('2020-03', 'Y')
print(a, a.dtype) # 2020 datetime64[Y]
print(np.datetime64('2020-03') == np.datetime64('2020-03-01')) # True
print(np.datetime64('2020-03') == np.datetime64('2020-03-02')) #False

由上例可以看出,2019-03 和 2019-03-01 所表示的其实是同一个时间。事实上,如果两个 datetime64 对象具有不同的单位,它们可能仍然代表相同的时刻。并且从较大的单位(如月份)转换为较小的单位(如天数)是安全的。

例:从字符串创建 datetime64 数组时,如果单位不统一,则一律转化成其中最小的单位。

import numpy as np
a = np.array(['2020-03', '2020-03-08', '2020-03-08 20:00'], dtype='datetime64')
print(a, a.dtype)
# ['2020-03-01T00:00' '2020-03-08T00:00' '2020-03-08T20:00'] datetime64[m]

例:使用arange() 创建 datetime64 数组,用于生成日期范围。

import numpy as np
a = np.arange('2020-08-01', '2020-08-10', dtype=np.datetime64)
print(a)
# ['2020-08-01' '2020-08-02' '2020-08-03' '2020-08-04' '2020-08-05'
# '2020-08-06' '2020-08-07' '2020-08-08' '2020-08-09']
print(a.dtype) # datetime64[D]
a = np.arange('2020-08-01 20:00', '2020-08-10', dtype=np.datetime64)
print(a)
# ['2020-08-01T20:00' '2020-08-01T20:01' '2020-08-01T20:02' ...
# '2020-08-09T23:57' '2020-08-09T23:58' '2020-08-09T23:59']
print(a.dtype) # datetime64[m]
a = np.arange('2020-05', '2020-12', dtype=np.datetime64)
print(a)
# ['2020-05' '2020-06' '2020-07' '2020-08' '2020-09' '2020-10' '2020-11']
print(a.dtype) # datetime64[M]

数组的创建

numpy 提供的最重要的数据结构是ndarray ,它是 python 中list 的扩展。

依据现有数据来创建

  • 通过array()函数进行创建。
  • 通过asarray()函数进行创建。
  • 通过fromfunction()函数进行创建。

依据ones和zeros填充方式

1数组

  • ones()函数:返回给定形状和类型的1数组。
  • ones_like()函数:返回与给定数组形状和类型相同的1数组。

空数组

  • empty()函数:返回一个空数组,数组元素为随机数。
  • empty_like 函数:返回与给定数组具有相同形状和类型的新数组。

单位数组

  • eye() 函数:返回一个对角线上为1,其它地方为零的单位数组。
  • identity() 函数:返回一个方的单位数组。

对角数组

  • diag()函数:提取对角线或构造对角数组。

常数数组

  • full()函数:返回一个常数数组。
  • full_like() 函数:返回与给定数组具有相同形状和类型的常数数组。

利用数值范围来创建ndarray

  • arange() 函数:返回给定间隔内的均匀间隔的值。
  • linspace() 函数:返回指定间隔内的等间隔数字。
  • logspace() 函数:返回数以对数刻度均匀分布。
  • numpy.random.rand() 返回一个由[0,1)内的随机数组成的数组。

结构数组的创建

结构数组,首先需要定义结构,然后利用np.array() 来创建数组,其参数dtype 为定义的结构。

利用字典来定义结构

import numpy as np
personType = np.dtype({
'names': ['name', 'age', 'weight'],
'formats': ['U30', 'i8', 'f8']})
a = np.array([('Liming', 24, 63.9), ('Mike', 15, 67.), ('Jan', 34, 45.8)],
dtype=personType)
print(a, type(a))
# [('Liming', 24, 63.9) ('Mike', 15, 67. ) ('Jan', 34, 45.8)]
# 

利用包含多个元组的列表来定义结构

import numpy as np
personType = np.dtype([('name', 'U30'), ('age', 'i8'), ('weight', 'f8')])
a = np.array([('Liming', 24, 63.9), ('Mike', 15, 67.), ('Jan', 34, 45.8)],
dtype=personType)
print(a, type(a))
# [('Liming', 24, 63.9) ('Mike', 15, 67. ) ('Jan', 34, 45.8)]
# 
# 结构数组的取值方式和一般数组差不多,可以通过下标取得元素:
print(a[0])
# ('Liming', 24, 63.9)
print(a[-2:])
# [('Mike', 15, 67. ) ('Jan', 34, 45.8)]
# 我们可以使用字段名作为下标获取对应的值
print(a['name'])
# ['Liming' 'Mike' 'Jan']
print(a['age'])
# [24 15 34]
print(a['weight'])
# [63.9 67. 45.8]

github学习地址

你可能感兴趣的:(numpy,python)