常量
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
以字节的形式返回数组中每一个元素的大小。