笔记灵感源自阿里云天池(个人整理使用,侵权删)
第一章-数据类型及数组的创建
一、常量
import numpy as np
print(0 * np.nan)
print(np.nan == np.nan)
print(np.inf > np.nan)
print(np.nan - np.nan)
print(0.3 == 3 * 0.1)
-
0 * np.nan
- 结果:
nan
- 原因:任何数乘以0理论上应该是0,但是
NaN
(Not a Number,不是一个数)是一个特殊的浮点值,用来表示未定义或无法表示的结果。当NaN
参与到任何数学运算中时,结果通常也是NaN
。因此,0乘以NaN
的结果是NaN
。
- 结果:
-
np.nan == np.nan
- 结果:
False
- 原因:根据IEEE浮点数标准,
NaN
不等于任何值,包括它自己。这意味着NaN == NaN
总是返回False
。
- 结果:
-
np.inf > np.nan
- 结果:
False
- 原因:当比较操作涉及到
NaN
时,结果总是False
。这是因为NaN
表示的是一个不确定的值,而不确定的值不能与其他数值(包括正无穷大inf
)进行有意义的比较。
- 结果:
-
np.nan - np.nan
- 结果:
nan
- 原因:两个
NaN
之间的任何算术运算(如加法、减法、乘法、除法)都会产生NaN
,因为它们都是不确定的值。
- 结果:
-
0.3 == 3 * 0.1
- 结果:
False
- 原因:虽然从数学上看0.3等于0.1乘以3,但由于浮点数的内部表示方式,浮点数运算可能会引入微小的舍入误差。在这种情况下,
3 * 0.1
可能不会精确地等于0.3
,而是非常接近0.3
的一个值,比如0.30000000000000004
。因此,直接比较这两个值会返回False
。
- 结果:
二、将numpy的datetime64对象转换为datetime的datetime对象
import numpy as np
import datetime
dt64 = np.datetime64('2020-02-25 22:10:10')
dt = dt64.astype(datetime.datetime)
print(dt, type(dt))
# 2020-02-25 22:10:10 <class 'datetime.datetime'>
三、给定一系列不连续的日期序列。填充缺失的日期,使其成为连续的日期序列。
import numpy as np
# 创建一个从2020-02-01到2020-02-10之间每隔2天的日期数组
dates = np.arange('2020-02-01', '2020-02-10', 2, np.datetime64)
print(dates) # 输出: ['2020-02-01' '2020-02-03' '2020-02-05' '2020-02-07' '2020-02-09']
# 初始化一个空列表,用于存储填充后的日期
out = []
# 遍历原始日期数组及其相邻日期之间的差值
for date, d in zip(dates, np.diff(dates)):
# 使用arange生成从当前日期到下一个日期之间的所有日期
out.extend(np.arange(date, date + d))
# 将填充后的日期列表转换为NumPy数组
fillin = np.array(out)
# 将最后一个日期添加到填充后的日期数组中
output = np.hstack([fillin, dates[-1]])
print(output)
# 输出: ['2020-02-01' '2020-02-02' '2020-02-03' '2020-02-04' '2020-02-05'
# '2020-02-06' '2020-02-07' '2020-02-08' '2020-02-09']
四、如何得到昨天,今天,明天的的日期
yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
today = np.datetime64('today', 'D')
tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
print ("Yesterday is " + str(yesterday))
print ("Today is " + str(today))
print ("Tomorrow is "+ str(tomorrow))
五、数组的创建
其中一例 S[1:-1, 1:-1] = 0
假设 S
是一个二维NumPy数组。这个操作的意思是将 S
数组中除了边界元素之外的所有内部元素设置为0。
-
切片操作
[1:-1, 1:-1]
:1:-1
表示从索引1到倒数第二个元素(不包括最后一个元素)。这里-1
是Python中的负索引,表示从末尾开始计数。- 因此,
1:-1
包括了从第一个元素之后到倒数第二个元素之前的全部元素。
-
多维切片
[1:-1, 1:-1]
:- 在二维数组中,第一个
1:-1
控制行索引,第二个
- 在二维数组中,第一个