常量

numpy.nan  表示空值

nan = NaN = NAN

两个空值是无法通过 “==” 进行比较的。

print(np.NAN == np.nan)  # False

print(np.nan != np.nan)  # True

空值不可以用 “==” 来进行比较,可以用numpy自带的方法进行判断。np.isnan() 方法按照元素列表判断每个传入的元素是否为空值并返回结果。np.count_nonzero() 计算参数列表中为True的个数

x = np.array([1, 2, 3, np.nan, 4, 5, np.nan])
y = np.isnan(x)
print(y)  # [False False False  True False False  True]
z = np.count_nonzero(y)
print(z)  # 2

numpy.inf  表示无穷大

Inf = inf = infty = Infinity = PINF

np.inf 可以用 “==” 进行比较

print(np.inf == np.Inf)  # True

numpy.pi 表示圆周率Π

numpy.e 表示自然数e

print(np.pi)  # 3.141592653589793
print(np.e)  # 2.718281828459045

时间日期和时间增量

datetime64

在numpy中,我们可以很容易将字符串类型转化成时间日期类型(datetime64。datatime是一个带单位的时间日期类型。

日期单位

代码含义

时间单位

代码含义

Y


h

小时

M


m

分钟

W


s


D


ms

毫秒

-

-

us

微秒

-

-

ns

纳秒

-

-

ps

皮秒

-

-

fs

飞秒

-

-

as

阿托秒

 

从字符串创建datetime64类型时,numpy会默认根据字符串选择对象的类型,也可以强制指定使用单位。从字符串创建datetime64数组时,如果不指定单位,一律转化为其中最小的单位。创建数组时,可以使用range()函数来确定生成日期的范围。datetime64可以进行相减,得出日期之间的差值,减的精度一律转化为其中的最小单位并以最小单位为结果返回。

a = np.datetime64('2020-10-19 16:26')
print(a, a.dtype)  # 2020-10-19T16:26 datetime64[m]


b = np.datetime64('2020-03', 'Y')
print(b, b.dtype)  # 2020 datetime64[Y]


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]


a = np.arange('2020-10-19 16', '2020-10-20', dtype=np.datetime64)
print(a)  # ['2020-10-19T16' '2020-10-19T17' '2020-10-19T18' '2020-10-19T19' '2020-10-19T20' '2020-10-19T21' 
# '2020-10-19T22' '2020-10-19T23']

timedelta64运算

timedelta64表示的是两个datetime之间的差值。所以timedelta64也是带单位的,并且它的单位与最小精度一致。自己生成delta类型对象时,注意 'M' 和 'Y' 是不能和其他单位进行运算的。因为一年有多少天和一个月有多少天都是未知的。timedelta64类型的对象可以像数字一样进行运算。

a = np.datetime64('2020-03') - np.datetime64('2020-01-01')
print(a, a.dtype)  # 60 days timedelta64[D]

a = np.timedelta64(1, 'Y')
b = np.timedelta64(6, 'M')
c = np.timedelta64(1, 'W')
d = np.timedelta64(1, 'D')
e = np.timedelta64(10, 'D')

print(a)  # 1 years
print(b)  # 6 months
print(a + b)  # 18 months
print(a - b)  # 6 months
print(2 * a)  # 2 years
print(a / b)  # 2.0
print(c / d)  # 7.0
print(c % e)  # 7 days

datetime64与datetime.datetime的转换

dt = datetime.datetime(year=2020, month=6, day=1, hour=20, minute=5, second=30)
dt64 = np.datetime64(dt, 's')
print(dt64, dt64.dtype)
# 2020-06-01T20:05:30 datetime64[s]

dt2 = dt64.astype(datetime.datetime)
print(dt2, type(dt2))
# 2020-06-01 20:05:30 <class 'datetime.datetime'>

数组的创建

numpy 提供的最重要的数据结构是ndarray,它是 python 中list的扩展。创建ndarray的方式有很多种。大体分为两种:有数据的和无数据的方式。

一、有数据

a、通过array()进行创建

b、通过asarray()进行创建

array()asarray()都可以将结构数据转化为 ndarray,但是array()asarray()主要区别就是当数据源是ndarray 时,array()仍然会 copy 出一个副本,占用新的内存,但不改变 dtype 时 asarray()不会。

c、通过fromfunction()进行创建

x = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
y = np.array(x)
z = np.asarray(x)
w = np.asarray(x, dtype=np.int)
x[1][2] = 2
print(x,type(x),x.dtype)
# [[1 1 1]
#  [1 1 2]
#  [1 1 1]] <class 'numpy.ndarray'> int32

print(y,type(y),y.dtype)
# [[1 1 1]
#  [1 1 1]
#  [1 1 1]] <class 'numpy.ndarray'> int32

print(z,type(z),z.dtype)
# [[1 1 1]
#  [1 1 2]
#  [1 1 1]] <class 'numpy.ndarray'> int32

def f(x, y):
    return 10 * x + y

x = np.fromfunction(f, (5, 4), dtype=int)
print(x)
# [[ 0  1  2  3]
#  [10 11 12 13]
#  [20 21 22 23]
#  [30 31 32 33]
#  [40 41 42 43]]


print(w,type(w),w.dtype)
# [[1 1 1]
#  [1 1 2]
#  [1 1 1]] <class 'numpy.ndarray'> int32

二、无数据

a、零数组

  • zeros()函数:返回给定形状和类型的零数组。

zeros_like()函数:返回与给定数组形状和类型相同的零数组。

def zeros(shape, dtype=None, order='C'):
def zeros_like(a, dtype=None, order='K', subok=True, shape=None):

 

b、1数组

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

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

def ones(shape, dtype=None, order='C'):
def ones_like(a, dtype=None, order='K', subok=True, shape=None):

 

c、空数组

  • empty()函数:返回一个空数组,数组元素为随机数。

empty_like函数:返回与给定数组具有相同形状和类型的新数组。

def empty(shape, dtype=None, order='C'): 
def empty_like(prototype, dtype=None, order='K', subok=True, shape=None):

 

d、单位数组

  • eye()函数:返回一个对角线上为1,其它地方为零的单位数组。
  • identity()函数:返回一个方的单位数组。
def eye(N, M=None, k=0, dtype=float, order='C'):
def identity(n, dtype=None):

 

e、对角数组

  • diag()函数:提取对角线或构造对角数组。
def diag(v, k=0):

f、常数数组

  • full()函数:返回一个常数数组。
  • full_like()函数:返回与给定数组具有相同形状和类型的常数数组。
def full(shape, fill_value, dtype=None, order='C'):
def full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None):


 


3. 利用数值范围来创建ndarray

  • arange()函数:返回给定间隔内的均匀间隔的值。
  • linspace()函数:返回指定间隔内的等间隔数字。
  • logspace()函数:返回数以对数刻度均匀分布。
  • numpy.random.rand() 返回一个由[0,1)内的随机数组成的数组。
def arange([start,] stop[, step,], dtype=None): 
def linspace(start, stop, num=50, endpoint=True, retstep=False, 
             dtype=None, axis=0):
def logspace(start, stop, num=50, endpoint=True, base=10.0, 
             dtype=None, axis=0):
def rand(d0, d1, ..., dn):

数组的属性

在使用 numpy 时,你会想知道数组的某些信息。很幸运,在这个包里边包含了很多便捷的方法,可以给你想要的信息。

  • numpy.ndarray.ndim用于返回数组的维数(轴的个数)也称为秩,一维数组的秩为 1,二维数组的秩为 2,以此类推。
  • numpy.ndarray.shape表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 ndim 属性(秩)。
  • numpy.ndarray.size数组中所有元素的总量,相当于数组的shape中所有元素的乘积,例如矩阵的元素总量为行与列的乘积。
  • numpy.ndarray.dtype ndarray 对象的元素类型。
  • numpy.ndarray.itemsize以字节的形式返回数组中每一个元素的大小。