Pandas基础-Task01-python基础

练习题:

Ex1:利用列表推导式写矩阵乘法

一般的矩阵乘法根据公式,可以由三重循环写出:

In [138]: M1 = np.random.rand(2,3)

In [139]: M2 = np.random.rand(3,4)

In [140]: res = np.empty((M1.shape[0],M2.shape[1]))

In [141]: for i in range(M1.shape[0]):
   .....:     for j in range(M2.shape[1]):
   .....:         item = 0
   .....:         for k in range(M1.shape[1]):
   .....:             item += M1[i][k] * M2[k][j]
   .....:         res[i][j] = item
   .....: 

In [142]: ((M1@M2 - res) < 1e-15).all() # 排除数值误差
Out[142]: True

请将其改写为列表推导式的形式。

作答:

res = [[sum([M1[i][k] * M2[k][j] for k in range(M1.shape[1])]) for j in range(M2.shape[1])] for i in range(M1.shape[0])]

纠错总结:
i和j的条件不能颠倒顺序,颠倒顺序之后会使得需要做乘法的矩阵不匹配,建议下次按照循环顺序,依次一层一层的添加条件

res = [[sum([M1[i][k] * M2[k][j] for k in range(M1.shape[1])]) for i in range(M1.shape[0])] for j in range(M2.shape[1])]

在这里插入图片描述

Ex2:更新矩阵

在这里插入图片描述
解题思路一:

A = np.arange(1,10).reshape(3,-1)
Asum= 1/A@np.ones(3) #计算出A矩阵三行的倒数之和
B=[[A[i][k]*Asum[i] for k in range(3)] for i in range(3)]
B

解题思路二:

A = np.arange(1,10).reshape(3,-1)
B = A*(1/A).sum(1).reshape(-1,1)
B

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值