Datawhale学习记录1

Task01

python基础

这一部分主要分成三个小节

Part01

第一部分是列表推导式与条件赋值,作者写的都是满直观的,最后写个简单的例子
下面展示一些 内联代码片

// 截断列表中超过14的元素,超过14就输出100
L=[1,2,3,4,5,6,11,23,14,15,16,19]
[i if i <=14 else 100 for i in L]
// 截断列表中超过14的元素,超过14就输出100
[1, 2, 3, 4, 5, 6, 11, 100, 14, 100, 100, 100]

Part02

这一部分主要是介绍匿名函数与map方法
下面展示一些 内联代码片

// A code block
[(lambda x: 2*x)(i) for i in range(5)]

// An highlighted block
[0, 2, 4, 6, 8]

下面展示一些 内联代码片

// A code block
list(map(lambda x: 2*x, range(5)))
// An highlighted block
[0, 2, 4, 6, 8]

Part03

这一部分主要是讲了zip对象与enumerate方法
zip函数能够把多个可迭代对象打包成一个元组构成的可迭代对象,它返回了一个zip对象,通过tuple, list可以得到相应的打包结果
下面展示一些 内联代码片

// A code block
L1, L2, L3 = list('abc'), list('def'), list('hij')
list(zip(L1, L2, L3)) #tuple(zip(L1, L2, L3))
// An highlighted block
[('a', 'd', 'h'), ('b', 'e', 'i'), ('c', 'f', 'j')]

enumerate是一种特殊的打包,它可以在迭代时绑定迭代元素的遍历序号
下面展示一些 内联代码片

// A code block
L = list('abcd')
for index,value in enumerate(L):
    print (index,value)
// An highlighted block
0 a
1 b
2 c
3 d

Numpy基础

这一部分分为6个小节,比较全面简单的介绍了Numpy的一些用法

Part01

这一部分主要是讲np数组的构造,最一般的方法是通过array来构造,首先在使用numpy时要导入

// A code block
import numpy as np

还介绍了一些特殊数组的生成方式:
1 等差数列有两种生成方式,一种是定义个数(np.linspace) ,另一种是定义间隔(np.arange)
2 全零矩阵(np.zeros),单位阵(np.eye),像右上角偏移的单位矩阵(np.full)
3 随机矩阵:np.random
最常用的随机生成函数为rand, randn, randint, choice,它们分别表示0-1均匀分布的随机数组、标准正态的随机数组、随机整数组和随机列表抽样.
除了choice以外其他的都比较直观,choice可以从给定的列表中,以一定概率和方式抽取结果,当不指定概率时为均匀采样,默认抽取方式为有放回抽样
下面展示一些 内联代码片

// A code block
my_list = ['a', 'b', 'c', 'd']
np.random.choice(my_list, 4, replace=False, p=[0.1, 0.7, 0.1 ,0.1])
// An highlighted block
array(['b', 'a', 'd', 'c'], dtype='<U1'

Part02

这一部分是介绍np数组的变形和合并
比较常用的操作.T(转置),对于二维数组而言,.r_和.c_分别表示上下合并和左右合并.
维度变换:reshape
reshape能够帮助用户把原数组按照新的维度重新排列。在使用时有两种模式,分别为C模式和F模式,分别以逐行和逐列的顺序进行填充读取。

Part03

这一部分主要介绍np数组的切片与索引。数组的切片模式支持使用slice类型的(start🔚step)切片,还可以直接传入列表指定某个维度的索引进行切片
但是它下面举的例子我都不太明白,这里就不做详细介绍了

Part04

这一部分主要介绍numpy中常用的的函数,where表示条件,nonzero返回非零数的索引,argmax, argmin分别返回最大和最小数的索引。any指当序列至少 存在一个 True或非零元素时返回True,否则返回False。all指当序列元素 全为 True或非零元素时返回True,否则返回False。cumprod, cumsum分别表示累乘和累加函数,返回同长度的数组,diff表示和前一个元素做差,由于第一个元素为缺失值,因此在默认参数情况下,返回长度是原数组减1。常用的统计函数包括max, min, mean, median, std, var, sum, quantile

Part05

这一部分介绍广播机制,广播机制用于处理两个不同维度数组之间的操作,当一个标量和数组进行运算时,标量会自动把大小扩充为数组大小,之后进行逐元素操作。当两个数组维度完全一致时,使用对应元素的操作,否则会报错,除非其中的某个数组的维度是 𝑚×1 或者 1×𝑛 ,那么会扩充其具有 1 的维度为另一个数组对应维度的大小。例如, 1×2 数组和 3×2 数组做逐元素运算时会把第一个数组扩充为 3×2 ,扩充时的对应数值进行赋值。但是,需要注意的是,如果第一个数组的维度是 1×3 ,那么由于在第二维上的大小不匹配且不为 1 ,此时报错。当一维数组 𝐴𝑘 与二维数组 𝐵𝑚,𝑛 操作时,等价于把一维数组视作 𝐴1,𝑘 的二维数组,与上面说的方法一致,当 𝑘!=𝑛 且 𝑘,𝑛 都不是 1 时报错。

Part06

这一部分介绍向量与矩阵 的计算。
向量内积: .dot,向量范数和矩阵范数:.np.linalg.norm,矩阵乘法:@

练习

练习4

// A code block
np.random.seed(0)
m, n, p = 100, 80, 50
B = np.random.randint(0, 2, (m, p))
U = np.random.randint(0, 2, (p, n))
Z = np.random.randint(0, 2, (m, n))
def solution(B=B, U=U, Z=Z):
    L_res = []
    for i in range(m):
        for j in range(n):
            norm_value = ((B[i]-U[:,j])**2).sum()
            L_res.append(norm_value*Z[i][j])
    return sum(L_res)
solution(B, U, Z)

```javascript
// An highlighted block
100566

结语

第一个task的学习过程就结束了,一开始以为很多,但是慢慢看下来,再回看几遍,便觉得刚刚好,练习的时候会把代码删掉自己默写,一开始是脑子一片空白,但还是逼着自己“瞎写”,一点一点,慢慢积累,看的次数多了,练的多了,开始逐渐有感觉。不管怎么样,加油吧!做起来!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值