Numpy练习(一)

以下表达式运行的结果分别是什么?

(提示: 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通道,表示透明度。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值