3.数值、日期和时间
3.9处理大型数组的计算
import numpy as np
ax = np.array([1, 2, 3, 4])
ay = np.array([5, 6, 7, 8])
#每个元素乘以2
print(ax*2)
#每个元素加10
print(ay+10)
#对应位置上的元素相加
print(ax+ay)
#对应位置上的元素相乘
print(ax*ay)
def f(x):
return 3*x**2 - 2*x + 7
#处理array对象里的每个元素
print(f(ax))
print(np.sqrt(ax))
print(np.cos(ax))
#产生类型为float大小为零的10000*10000的array对象
grid = np.zeros(shape=(10000, 10000), dtype=float)
print(grid)
print(grid+10)
print(grid[1])
#多维array对象
a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
#每一行的第一列数
print(a[:,1])
#第二行到第三行,第二列到第三列数
print(a[1:3, 1:3])
#第二行到第三行,第二列到第三列数+10
print(a[1:3, 1:3]+10)
print(a+[100, 101, 102, 103])
print(a)
#条件选择,a中小于10的元素全部替换成10
np.where(a < 10, a, 10)
3.10略
3.11随机选择
'''
random采用马特赛旋转算法(梅森旋转算法)来计算随机数
'''
import random
#从序列中随机选择一个元素
values = [1, 2, 3, 4, 5]
print(random.choice(values))
#从序列中随机选择两个元素,返回一个列表
print(random.sample(values, 2))
#打乱顺序
random.shuffle(values)
print(values)
#从0-10随机选择一个整数
print(random.randint(0, 10))
#随机从0-1返回一个浮点数
print(random.random())
#返回一个随机的200位的数
print(random.getrandbits(200))
#默认是时间种子,自定义种子应该是定义变化种子参数的函数,参数一成不变结果也不会改变
random.seed()
random.seed(12345)
random.seed(b'bytedata')
3.12时间换算
from datetime import timedelta
from datetime import datetime
#时间差对象
a = timedelta(days=2, hours=6)
b = timedelta(hours=4.5)
c = a+b
print(c.days, c.seconds, sep=" ")
print(c.seconds/3600)
print(c.total_seconds()/3600)
m = datetime(2012, 9, 23)
print(a+timedelta(days=10))
n = datetime(2012, 12, 21)
d = n - m
print(d.days)
now = datetime.today()
print(now)
print(now+timedelta(minutes=10))
j = datetime(2012, 3, 1)
k = datetime(2012, 2, 28)
print(a-b)
print((a-b).days)
l = datetime(2013, 3, 1)
i = datetime(2013, 2, 28)
print((l-i).days)
#可以产生月份差和星期差
from dateutil.relativedelta import relativedelta
s = datetime(2012, 9, 23)
#print(s+timedelta(months=1))Error
print(a+relativedelta(months=+1))
print(a+relativedelta(months=+4))
e = datetime(2012, 12, 21)
g = e-s
print(g)
t = relativedelta(e, s)
print(t)
print(t.months, t.days, sep=" ")
3.13计算上周五的日期
from datetime import datetime, timedelta
weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
def get_previous_byday(dayname, start_date=None):
if start_date is None:
start_date = datetime.today()
day_num = start_date.weekday()
print(day_num)
day_num_target = weekdays.index(dayname)
days_ago = (7 + day_num - day_num_target) % 7
if days_ago == 0:
days_ago = 7
target_date = start_date - timedelta(days=days_ago)
print(target_date)
print(get_previous_byday('Thursday', datetime(2019, 9, 15)))
from dateutil.relativedelta import relativedelta
from dateutil.rrule import *
d = datetime.now()
print(d)
#next Friday
print(d+relativedelta(weekday=FR))
#last Friday
print(d+relativedelta(weekday=FR(-1)))
3.14找出当月的日期范围
from datetime import datetime, date, timedelta
import calendar
def get_month_range(start_date=None):
if start_date is None:
#替换day属性为1号
start_date = datetime.today().replace(day=1)
#返回第一天是周几,周几对应的是0-6,和月天数
_, days_in_month = calendar.monthrange(start_date.year, start_date.month)
print(_)
print(days_in_month)
end_date = start_date + timedelta(days=days_in_month)
return (start_date, end_date)
a_day = timedelta(days=1)
first_day, last_day = get_month_range()
while first_day < last_day:
print(first_day)
first_day += a_day
3.15将字符串转化为日期
from datetime import datetime
text = '2019-09-09'
#%Y表示以四位数字表示的年份,%m表示一两位数字表示的月份
y = datetime.strptime(text, "%Y-%m-%d")
z = datetime.now()
diff = z - y
print(diff)
#将日期对象转化为字符串,%A表示英文月份,%B表示英文周几,%d、%Y表示天数和年份
nice_z = datetime.strftime(z, '%A %B %d, %Y')
print(nice_z)
3.16处理涉及到时区的日期时间
from datetime import datetime
from pytz import timezone
import pytz
d = datetime(2012, 12, 21, 9, 30, 0)
print(d)
central = timezone('US/Central')
loc_d = central.localize(d)
print(loc_d)
#日期经过本地化处理就能转换为其他的时区
bang_d = loc_d.astimezone(timezone('Asia/Kolkata'))
print(bang_d)
#时区名称, 使用ISO 3166国家代码作为键查询
print(pytz.country_timezones['IN'])