import numpy as np
# a = np.array([[1, 2, 3], [4, 5, 6]])
# print(a)
# .shape查看数据的形状,结果是一个元组
# print(type(a.shape))
# .reshape修改数组的形状,但返回值的数组是修改后的形状,原数组其实形状不变。如果数据不够则会报错
# b = a.reshape(3, 2)
# print(b)
# print(a)
# .flatten()可以将多维数组转化为一维数组, 原数组形状不变
# b = a.flatten()
# print(b)
# 创建数组的方式 , a,b,c的内容均相同。arange第三个参数 dtype=None
# a = np.array([1, 2, 3, 4, 5, 6])
# b = np.array(range(1, 7))
# c = np.arange(1, 7)
# print(a, b, c)
# 将csv文件的数据转化为列表的形势,
"""
第一个参数:文件路径(必须)
delimiter:分割字符串,默认是空格,改为逗号
dtype:数据类型,可选,默认是np.float
skiprows:跳过前x行,一般跳过第一行的表头
usecols:读取指定的列,索引,元组类型
unpack:如果为True,读入属性将分别写入不同的数组变量,Flase读入数据只写入一个数据变量,默认为Flase
"""
# csv_file_path = "./books.csv"
# t1 = np.loadtxt(csv_file_path, delimiter=",", dtype="str")
# print(t1)
# # 取行
# print(t1[2])
# # 取连续的行
# print(t1[2:])
# # 取不连续的多行
# print(t1[[2, 3, 5]])
# # 取列(第3列到最后一列)
# print(t1[:, 2:])
# # 取不连续的多列(第一列和第三列)
# print(t1[:, [0, 2]])
# # 取行和列,取第三行,第四列的值
# print(t1[2, 3])
# # 取多行和多列,取第3行到第五行,第2列到第4列的结果
# print(t1[2:5, 1:4])
"""
numpy中的布尔索引
"""
# t = np.arange(24).reshape((4, 6))
# print(t < 10)
# # 将数组中小于10的数字替换为10
# t[t < 10] = 10
# print(t)
# print(t)
"""
创建数组的更多好用方法
扩展:数组的拼接。垂直拼接np.vstack((数组1, 数组2))
水平拼接np.hstack((数组1, 数组2))
"""
# # 创建一个全为0的数组
# a = np.zeros((3, 4))
# print(a)
# # 创建一个全为1的数组
# b = np.ones((4, 3))
# print(b)
"""
inf:表示正无穷,-inf表示负无穷。比如除以一个0,(python中会直接报错,numpy中是一个inf或者-inf)
nan:not a number 表示不是一个数字。一般出现读取文件为float的时候,如果有缺失,就会出现nan;
做出不合理的运算也会出现nan(列:无穷大减去无穷大)
inf和nan的类型都是float,nan和任何值得计算结果都为nan
"""
# # 两个nan是不相等的
# print(np.nan == np.nan)
# # 利用nan的特性,判断数组中nan的个数
# t = np.arange(12).reshape((4, 3))
# t1 = np.array([np.nan, np.nan, np.nan])
# t2 = np.vstack((t, t1))
# print(t2)
# # 判断nan的个数
# print(np.count_nonzero(t2 != t2))
# # 将nan改为0
# t2[np.isnan(t2)] = 0
# print(t2)