这里将课后习题完成。
数据操作
1.运行本节中的代码。将本节中的条件语句X == Y
更改为X < Y
或X > Y
,然后看看你可以得到什么样的张量。
改成X>Y后输出:
tensor([[False, False, False, False], [ True, True, True, True], [ True, True, True, True]])
改成X<Y后输出
tensor([[ True, False, True, False], [False, False, False, False], [False, False, False, False]])
2.用其他形状(例如三维张量)替换广播机制中按元素操作的两个张量。人结果是否与预期相同?
如果两个张量如下:
[in]: x = torch.ones((4,3,5))
[in]: y = torch.ones((4,1,3))
[in]: print(x + y)
输出为
[out]: ValueError: operands could not be broadcast together with shapes (4,3,5) (4,1,3)
这两个张量是不能兼容的
而如果
x = torch.ones((4,1,5))
y = torch.ones((1,3,5))
这是兼容的
可见,要想两个张量之间进行广播,那么对应的维度如果不同的话,其中一个的长度必须为1。
数据预处理
创建包含更多行和列的原始数据集。
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'grades.csv')
with open(data_file, 'w') as f:
f.write('AI,Caculus,Linear Algebra,probability,pandas,total number\n')
f.write('Jack,P,NA,P,P,NP,329\n')
f.write('Mike,NP,NP,NP,NA,NP,208\n')
f.write('Alice,P,P,NA,NP,P,NA\n')
f.write('Julian,NA,NA,P,NA,P,600\n')
f.write('George,P,NA,NA,P,P,503\n')
data = pd.read_csv(data_file)
1.删除缺失值最多的列。
#找到缺失值最多的列
idx = data.isna().sum().idxmax()
#删除该列
data.drop(labels = idx, axis=1)
2.将预处理后的数据转换为张量格式
#将数据全部化为数字
inputs = pd.get_dummies(data,dummy_na=True)
outputs = torch.tensor(inputs.values)
线性代数
1.易证。
2.易证。
3.
4.2
5.是的,第一根轴
6.报错,因为这样求和得到的张量会降维,除法操作变为shape(5,4)变为shape(1,5),无法进行广播
7.是shape(1,3,4),shape(2,1,4)和shape(2,3,1)
8.得到所有元素的平方和开根号
微积分
1.
2.
3.设那么有
4.对b的偏导同理。