以下表达式运行的结果分别是什么?
(提示: NaN = not a number, inf = infinity) nan不是一个数字 inf是无穷大
0 * np.nan 结果为nan
np.nan == np.nan 结果为False
np.inf > np.nan 结果为False
np.nan - np.nan 结果为nan
0.3 == 3 * 0.1 结果为False
将numpy的datetime64对象转换为datetime的datetime对象。
【知识点:时间日期和时间增量】
#将datetime64对象转化为datetime对象
dt64 = np.datetime64('2020-02-25 22:10:10')
dt = dt64.astype(datetime.datetime)
print(type(dt))
#将datetime对象转化为datetime64对象
dt = datetime.datetime(year=2021,month=12,day=23,hour=12,minute=2,second=23)
dt64 = np.datetime64(dt)
给定一系列不连续的日期序列。填充缺失的日期,使其成为连续的日期序列。
【知识点:时间日期和时间增量、数学函数】
思路:获取最小和最大的日期,然后重新建立一个新的列表,按照步长为1生成新的数组
ates = np.arange('2020-02-01', '2020-02-10', 2, np.datetime64)
max = max(ates)
min = min(ates)
print(max)
print(min)
new_ates = np.arange(min,max+1,1,np.datetime64)
print(new_ates)
答案:
import numpy as np
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)):
out.extend(np.arange(date, date + d))
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']
numpy.diff(a, n=1,axis=-1)
a:输入矩阵
n:可选,代表要执行几次差值
axis:默认是最后一个
举例:
import numpy as np
A = np.arange(2 , 14).reshape((3 , 4))
A[1 , 1] = 8
print('A:' , A)
# A: [[ 2 3 4 5]
# [ 6 8 8 9]
# [10 11 12 13]]
print(np.diff(A))
# [[1 1 1]
# [2 0 1]
# [1 1 1]]
np.vstack():使两个列表在竖直方向上堆叠
np.hstack():使两个列表在水平方向上平铺
如何得到昨天,今天,明天的的日期
【知识点:时间日期】
思路:获取当前日期,然后转化为datetime64类型,这就可以进行加减操作
today = datetime.date.today()
dt64 = np.datetime64(today)
print(dt64-1)
print(dt64)
print(dt64+1)
当然,答案也有另外一种写法
yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
today = np.datetime64('today', 'D')
tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
np.datetime64('today','D')这也是获取当前日期的一种方式
创建从0到9的一维数字数组。
【知识点:数组的创建】
arr = np.arange(10)
print(arr)
创建一个元素全为True
的 3×3 数组。
arr = np.ones((3,3),dtype=bool)
print(arr)
#答案
import numpy as np
arr = np.full([3, 3], True, dtype=np.bool)
print(arr)
创建一个长度为10并且除了第五个值为1的空向量
arr = np.zeros(10)
arr[4] = 1
print(arr)
创建一个值域范围从10到49的向量
arr = np.arange(10,50)
print(arr)
创建一个 3x3x3的随机数组
(提示: np.random.random)
arr = np.random.random((3,3,3))
print(arr)
创建一个二维数组,其中边界值为1,其余值为0
- (提示: array[1:-1, 1:-1]
arr = np.ones((4,4))
arr[1:-1,1:-1] = 0
print(arr)
创建长度为10的numpy数组,从5开始,在连续的数字之间的步长为3。
写的时候没有抽象出来,只是简单的计算了
start = 5
step = 3
length = 10
a = np.arange(start, start + step * length, step)
将本地图像导入并将其转换为numpy数组。
from PIL import Image
image = Image.open('image.png')
arr = np.array(image)
print(arr.shape)
print(arr.dtype)
arr.shape返回的值是三个数字:长度、宽度、通道数。
何为通道数:
灰度图的通道数为1,基本上彩色图的通道为3,描述一个像素点,如果是灰度,那么只需要一个数值来描述它,就是单通道。如果一个像素点,有RGB三种颜色来描述它,就是三通道。对于四通道的,R、G、B加上一个A通道,表示透明度。