python学习_day5---python基础(sys、time模块)+数据分析numpy

一、sys模块

import sys

print(sys.version) # 查看版本
# sys.path 返回模块的搜索路径的列表
print(sys.path)
# 增加路径
sys.path.append("../day4") # 插到末尾
sys.path.insert(0, "../day4") # 插到开头
# sys.argv接受命令行下的参数
def f():
    print("这是普通函数")
# 主函数
if __name__ == "__main__":
    print(sys.argv)
    f()

二、time模块

import time

# 时间戳 ---1970年1月1日00:00:00开始到现在的秒值, 返回float类型
res = time.time()
print(res, type(res)) # 1637976966.321408 <class 'float'>

# 时间元组
res1 = time.localtime()
print(res1) # time.struct_time(tm_year=2021, tm_mon=11, tm_mday=27, tm_hour=9, tm_min=36, tm_sec=6, tm_wday=5, tm_yday=331, tm_isdst=0)

# 时间格式化
# time.strftime('%Y-%m-%d %H:%M:%S')
res2 = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
print(res2) # 2021-11-27 09:36:06

三、numpy

"""
数据分析三剑客

numpy(numberical python) 数值统计模块
matplotlib (matlab plot lib) 将matlab画图包在python中的实现
pandas (panel data && data analysis). 数据统计、数据清洗
"""

1、创建数组 array

import numpy as np

# numpy中基本的数据结构 ndarray 数组对象,可以存储和处理高维数组和矩阵
# ndarray中所有元素 同一数据类型

# 一、创建数组 array
# 参数,可以列表、元组; 一维数组传入一维列表。
# 二维数组 列表嵌套 [[],[],[]]
arr1 = np.array([1, 2, 3])
print(arr1, type(arr1)) # [1 2 3] <class 'numpy.ndarray'>
print([1, 2, 3]) # [1, 2, 3] 列表

arr2 = np.array([[1, 2, 3],
                 [12, 13, 11]])
print(arr2, type(arr2))

2、数组的属性

# 二、数组的属性
"""
shape:形状---返回元组 ;二维(行,列);一维(元素个数,)
ndim:维度
size:元素个数
itemsize:元素个数字节数
dtype: data type。数组中数据元组的类型
"""
# 二维
print("shape", arr2.shape) # shape (2, 3)
print("ndim", arr2.ndim) # ndim 2
print("size", arr2.size) # size 6
print("itemsize", arr2.itemsize)  # itemsize 4;1节= 8位;
print("dtype", arr2.dtype)  # dtype int32

# 一维
print("一维数组shape", arr1.shape)  # (3,)

3、数组转换

# 三、数组转换
# (1) 二维数组转1维的
# a、利用shape属性进行转换, 就地修改
print(arr2)
arr2.shape = (6, )
print(arr2)

# b、reshape函数, 会返回一个新数组
arr3 = arr2.reshape(6, )
print(arr3)

# (2)1维转换2维
1>正常,需保证元素个数一致
arr4 = arr3.reshape(3,2)
print("arr4\n", arr4)
2>变成不知道多少行的两列的
arr4 = arr3.reshape(-1, 2) # 使用-1作为占位符,仅能存在一个-1
print("arr4\n", arr4)
3>1维转换3维的
arr4 = arr3.reshape(-1, 2, 1)  # 使用-1作为占位符
print("arr4\n", arr4)

4、利用特殊函数创建数组

1>创建指定范围的一维数组

# eg:1-10
# 指定范围的一维数组 start stop step
arr5 = np.arange(1, 11)
print(arr5)

2>创建全0 全1数组

# 全0 全1
# 传入的参数为shape信息
arr0 = np.zeros((3, 4), dtype=int) # dtype默认是float类型
print(arr0)

5、随机数的生成

# 五、随机数的生成
# 随机种子:设置随机种子,可以使结果固定;不设置,每次运行结果都会变化
np.random.seed(1) # 固定的随机数

print(np.random.random((3, 4)))  # 0-1之间的随机数
print(np.random.randn(6))  # 服从标准正态的随机数
print(np.random.rand(2))  # 服从均匀分布的随机数
# print(np.random.randint(low=2, high=5, size=3))
print(np.random.randint(low=2, high=5, size=(5, 6)))

四、数组的访问

import numpy as np

# 数组的访问
arr1 = np.arange(16).reshape(4, 4)
print(arr1)
"""
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
"""
# 1>下标法
print("第一行", arr1[0])
print("第一行最后一个值", arr1[0][-1])
# print("第一行最后一个值", arr1[行索引下标, 列索引下标])
print("第一行最后一个值", arr1[0, -1])

# 2>切片法: 数组名[行索引下标切片, 列索引下标切片]
# 如果行取全部,或列取全部,写冒号:即可
print("中心四个数值\n",arr1[1:3, 1:3])
print("第0列和最后一列\n", arr1[:, ::3])
print("第0行和最后一行\n", arr1[::3, :])
print("第0行和最后一行\n", arr1[::3])
"""
中心四个数值
[[ 5  6]
 [ 9 10]]
第0列和最后一列
 [[ 0  3]
 [ 4  7]
 [ 8 11]
 [12 15]]
第0行和最后一行
 [[ 0  1  2  3]
 [12 13 14 15]]
第0行和最后一行
 [[ 0  1  2  3]
 [12 13 14 15]]
"""

# 3>列表法 数组[行索引列表, 列索引列表]
# 访问4,10,15
print(arr1[[1, 2, -1], [0, 2, -1]]) # [ 4 10 15]

# 4>混合使用
print("第0列和最后一列\n", arr1[:, [0, -1]])
"""
第0列和最后一列
 [[ 0  3]
 [ 4  7]
 [ 8 11]
 [12 15]]
"""

# 5>布尔索引访问:长度必须一致
# 一维数组的访问
arr2 = np.arange(4)
bool_arr = [True, False, True, True]
# 0 1 2 3
# T F T T
print(arr2) # [0 1 2 3]
print(arr2[bool_arr]) # [0 2 3]

# 二维数组的访问
print(arr1)
bool_arr = [True, False, True, True]  # (0, 2, 3)
bool_arr2 = [False, False, False, False]  # ()
# 布尔数组可以作为行索引,也可以作为列索引;不建议行列同时使用布尔索引
print(arr1[bool_arr, bool_arr])
# print(arr1[bool_arr, bool_arr2]) 会报错
"""
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
这块结合了列表法: 
[ 0 10 15]

"""

五、数组的运算

import numpy as np

arr1 = np.array([[1, 0],
                 [2, 1]])

arr2 = np.array([[0, 1],
                 [1, 0]])

# 数组的运算,对应位置的元素进行运算
# 运算:算术运算、逻辑运算、关系运算(数组之间的shape必须相同)

# 1>数组之间的shape相同
arr3 = arr1 + arr2
print("arr3\n", arr3)
"""
arr3
 [[1 1]
 [3 1]]
"""
# 2>和具体的数值之间的运算
print(arr1 + 5)
"""
[[6 5]
 [7 6]]
"""
# 3>数组之间的shape不相同
# 广播机制
"""
两个参与运算的数组shape不相同,底层进行广播机制判断

1、让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐
2、输出数组的shape是输入数组shape的各个轴上的最大值
3、如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错
4、当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值
"""
# (2,2) + (3,2) ---- 不能广播
# (2,2) + (1,2) -----成功
# arr4 = np.arange(6).reshape(3,2) × 不可以
arr4 = np.arange(2).reshape(1, 2) # √ 可以
print(arr1)
print(arr4)
print("加和\n", arr1 + arr4)
"""
arr1
[[1 0]
 [2 1]]
 arr4
[[0 1]]
加和
 [[1 1]
 [2 2]]
"""

1、判断能不能进行广播
1>计算两个数组的shape
2>查看shape长度是否一致-----(2,2)和(2,)---->(1,2)
3>从右往左,依次比较两个数组的各个维度的信息:
如果相同或其中一个为1,则可以进行广播;如果不同,不能广播
2、如何广播eg
1> (4,3)和(1,3)
在这里插入图片描述2>(4,3)和(4,1)
在这里插入图片描述

# 数组关系运算--- 结果为布尔数组
print(arr1)
print(arr2)
res = (arr1 > arr2)
print(res)
"""
[[1 0]
 [2 1]]
[[0 1]
 [1 0]]
[[ True False]
 [ True  True]]
"""
# 逻辑运算
# np.all (是否全部为True)
# np.any (是否存在True)

# eg
arr1 = np.array([1, 2, 3, 4])
print(arr1 > 3)
print("是否所有元素都大于3", np.all(arr1 > 3))
print("是否存在元素大于3", np.any(arr1 > 3))
"""
[False False False  True]
是否所有元素都大于3 False
是否存在元素大于3 True
"""

补充:轴
在这里插入图片描述
在这里插入图片描述

六、统计分析函数

import numpy as np

arr = np.arange(9).reshape(3, 3)
print(arr)

# 默认对所有元素求和
# aixs=0 对每一列进行运算
print("求和\n", np.sum(arr, axis=0))
print("最大值\n", np.max(arr, axis=0))
print("最小值\n", np.min(arr, axis=0))
print("平均值\n", np.mean(arr, axis=0))

"""
[[0 1 2]
 [3 4 5]
 [6 7 8]]
求和
 [ 9 12 15]
最大值
 [6 7 8]
最小值
 [0 1 2]
平均值
 [3. 4. 5.]
"""

Guess you like

Origin blog.csdn.net/weixin_45800653/article/details/121567955