#李沐-线性代数
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
#遇到了这个问题,意思是你的 CPU 支持AVX AVX2 (可以加速CPU计算),但你安装的 TensorFlow 版本不支持——解决:1. 如果是初学者 或者 没有太大计算速度的需求,在开头加上这两行忽略这个提示即可
#输入标量
x = tf.constant(3.0)
y = tf.constant(2.0)
#print(x+y,x*y,x-y,x**y,x/y)
#输入向量
x = tf.range(4)
print(x)
#在代码中,我们通过张量的索引来访问任一元素
print(x[3]) #索引从0开始,索引结果是3
#我们可以通过调用Python的内置len()函数来访问张量的长度
print(len(x))
#当用张量表示一个向量(只有一个轴)时,我们也可以通过.shape属性访问向量的长度。 形状(shape)是一个元素组,列出了张量沿每个轴的长度(维数)。 对于只有一个轴的张量,形状只有一个元素。
print(x.shape)
#矩阵,当调用函数来实例化张量时, 我们可以通过指定两个分量 mm 和 nn 来创建一个形状为 m×n 的矩阵
A = tf.reshape(tf.range(20),(5,4)) #一个5行4列的矩阵
print('A=',A)
#我们可以通过行索引(ii)和列索引(jj)来访问矩阵中的标量元素 aij
#当我们交换矩阵的行和列时,结果称为矩阵的转置(transpose)
#矩阵的转置:把矩阵按照对角线翻转
A_transpose = tf.transpose(A)
print('A_transpose=',A_transpose)
#作为方阵的一种特殊类型,对称矩阵(symmetric matrix) A等于其转置
B = tf.constant([[1,2,3],[2,0,4],[3,4,5]])
print(B)
B_transpose = tf.transpose(B)
print(B_transpose)
#张量Tensor
#就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构。 张量(本小节中的“张量”指代数对象)为我们提供了描述具有任意数量轴的 n 维数组的通用方法
X = tf.reshape(tf.range(24),(2,3,4)) #创建了2个3列4行的矩阵,矩阵里的数字在0-23之间
print(X)
#给定具有相同形状的任意两个张量,任何按元素二元运算的结果都将是相同形状的张量
A = tf.reshape(tf.range(20, dtype=tf.float32), (5, 4))
B = A # 不能通过分配新内存将A克隆到B
print(B)
#两个矩阵的按元素乘法称为Hadamard积(Hadamard product)
print('A*B=',A*B)
#将张量乘以或加上一个标量不会改变张量的形状,其中张量的每个元素都将与标量相加或相乘。
a = 2
X = tf.reshape(tf.range(24),(2,3,4))
print(a+X)
print(a*X.shape)
#2.3.6降维
#计算其元素的和:我们可以对任意张量进行的一个有用的操作是计算其元素的和。
#在数学表示法中,我们使用 ∑ 符号表示求和。 为了表示长度为 d 的向量中元素的总和,可以记为 ∑di=1xi 。 在代码中,我们可以调用计算求和的函数:
x = tf.range(4,dtype=tf.float32)
print('x is' , x)
x_sum = tf.reduce_sum(x)
print('the sum of x is',x_sum)
#我们可以表示任意形状张量的元素和。
A = tf.reshape(tf.range(20, dtype=tf.float32), (5, 4))
print(A.shape)
#计算平均值的函数也可以沿指定轴降低张量的维度。
A_mean = tf.reduce_mean(A)
print('A',A)
print('A mean is',A_mean)
#2.3.6.1. 非降维求和
#但是,有时在调用函数来计算总和或均值时保持轴数不变会很有用。
sum_A = tf.reduce_sum(A,axis=1,keepdims=True)
print(sum_A)
#2.3.7. 点积(Dot Product)
y = tf.ones(4,dtype=tf.float32)
print(y)
print(tf.reduce_sum(x*y))
#2.3.8. 矩阵-向量积
A_production = tf.linalg.matvec(A, x)
print(A_production)
#2.3.9. 矩阵-矩阵乘法
B = tf.ones((4, 3), tf.float32)
print(tf.matmul(A,B))
#2.3.10. 范数
#非正式地说,一个向量的范数告诉我们一个向量有多大。 这里考虑的大小(size)概念不涉及维度,而是分量的大小。
u = tf.constant([3.0, -4.0])
print(tf.norm(u))
print(tf.reduce_sum(tf.abs(u)))
我实在听不懂了,也不知道他有什么用,继续下一课吧