1. Numpy array数组
2. TensorFlow, PyTorch, PaddlePaddled tensor张量
# 随机数
import random
# 标准写法
scores = []
for _ in range(10):
scores.append(random.randint(a=0, b=100))
# 列表解析式
scores1 = []
random.seed(0)
scores1 = [random.randint(a=0, b=100) for _ in range(10)]
# numpy
import numpy as np
# Create an array.
scores2 = np.array(scores)
print(type(scores),type(scores1),type(scores2))
np.array([[1,2,3],[4,5,6]]).ndim # 维度
# 10个学生,每个学生 3门课
scores = np.random.randint(low=0, high=101, size=(10, 3))
print(scores.shape) # 形状
print(scores.dtype) # 数据类型,默认int32
print(scores.size) # 大小
scores.reshape((1, 2, 5, 3)) # 变化数组形状
scores.astype(np.float32) # 强转类型
a = 2.0 # 浮点数规范写法
np.random.seed(1) # seed 种子,种子一样 结果一样,可验证用
scores = np.random.randint(low=0, high=101, size=10)
# 匿名函数
subtract = lambda a, b : a - b
# numpy向量计算
scores + 2
subtract(scores, 2)
# NumPy中的线性代数工具箱
# linear algebra
np.linalg.norm(a)
"""
余弦相似度:一种用于衡量两个向量之间相似度的方法
# 两个向量有相同的指向时,余弦相似度的值为1;
# 两个向量夹角为90°时,余弦相似度的值为0;
# 两个向量指向完全相反的方向时,余弦相似度的值为-1
"""
cosine_similarity = a @ b / np.linalg.norm(a) / np.linalg.norm(b)
cosine_similarity
"""
按维度来定义处理
"""
# 教委主任[学校, 班级, 学生, 科目]
np.random.seed(0)
scores = np.random.randint(low=0, high=101, size=(8, 4, 30, 3)
"""
按维度来处理数据
- 索引和切片
- 更复杂的索引和切片
"""
# 把第 3 所学校的所有数据取出来
scores[2,:, :, :]
# 把所有的语文成绩取出来
scores[:, :, :, 0]
# 把所有学校的二班成绩都取出来
scores[:, 1, :, :]
# 所有学生的语文平均分
(scores[:, :, :, 0]).mean()
# 返回最大值的索引
(scores[:, :, :, 0]).argmax()
a = np.array([1,2,3])
np.sqrt((a ** 2).sum(axis=0))
b = np.array([4, 5, 6])
print(a + b)
print(a - b)
print(a / b)
print("手动算内积:")
print((a * b).sum(axis=0))
print("向量的点乘积:")
print(a @ b) # 1*4 + 2*5 + 3*6
print(a.dot(b))
print(b.dot(a))
print(np.dot(a, b))
print("开根号:")
print(np.sqrt(a))
print(np.abs(a))
print("向量的模:")
print(np.sqrt((a ** 2).sum()))
print(np.sin(a))
print("欧氏距离,N维空间内两点的直线距离:")
np.sqrt(((a - b)**2).sum())
"""
标准差
"""
a = (scores[:, :, :, 0])
# 手动计算
np.sqrt(((a - a.mean()) ** 2).mean())
# 函数计算
a.std()
# 方差
((a - a.mean()) ** 2).mean()
a.var()
# 标准差
np.sqrt(a.var())
# 切片计算
# [students, subjects] 50个学生3门课
scores = np.random.randint(low=0, high=101, size=(50, 3))
# 第3号同学的三门课 第 2 门课
scores[2, 1]
# 找出所有语文及格,但是英语挂科的同学
condition = (scores[:, 0] >= 60) & (scores[:, -1] < 60)
scores[condition, :]
# 所有学生,所有科目的平均分
scores.mean()
# 所有学生,每门课的平均分
scores.mean(axis=0)
# 每个学生的平均分
scores.mean(axis=1)
# 每门课的标准差
scores.std(axis=0)
a = np.random.randint(low=0, high=101, size=5)
b = np.random.randint(low=0, high=101, size=(2, 5))
c = np.random.randint(low=0, high=101, size=(2, 1))
print(a,b,c,sep='\n')
a + b
a + c
# Join a sequence of arrays along a new axis.
# 沿新轴连接数组 stack
np.stack(arrays=(c, c), axis=1)
# Join a sequence of arrays along an existing axis.
# 沿着现有的轴连接数组 concatenate
np.concatenate((c, c), axis=0)
"""
读取原始数据
"""
X = []
y = []
with open(file="iris.csv", mode="r", encoding="utf8") as f:
f.readline()
for line in f:
line = line.strip().split(",")
features = [float(ele) for ele in line[:-1]]
label = int(line[-1])
X.append(features)
y.append(label)
X = np.array(X)
y = np.array(y)
# 求出每一个特征的均值
X.mean(axis=0)
# 每一个特征的标准差
X.std(axis=0)
# 每一个特征的最大值
X.max(axis=0)
# 每一个特征的最小值
X.max(axis=0)
from matplotlib import pyplot as plt
x0 = X[:,0]
# 折线图 plot
# 散点图 scatter
plt.plot(x0)
plt.scatter(x0,y)
# 提取基本参数
_mean = X.mean(axis=0)
_std = X.std(axis=0)
_min = X.min(axis=0)
_max = X.max(axis=0)
# 同时把4个特征做规范化
X1 = (X - _mean) / _std
# 同时把 4 个特征做归一化 MinMax: [0, 1]
X2 = (X - _min) / (_max - _min)