pandas学习笔记(Datawhale组队学习)

**啰嗦话:**我的研究方向是多智能强化学习,偶然间在github上看见了Datawhale的关于李宏毅老师的笔记简直发现了宝藏(哈哈哈),接下来参加第一次组队学习,说实话对于写博客,我还是更喜欢把东西记在自己本子上,可能我是老古董了,废话不多下面是学习内容,(作为自己的笔记,防止以后忘了)
1、 python基础
说说实话python这块还是比较熟悉哈哈哈,但是还是学习一下吧。
1.1列表与赋值
老规矩直接上代码

L = []
def my_func(x):
    return 2*x

for i in range(5):
    L.append(my_func(i))

print(L)##[0, 2, 4, 6, 8]

这段代码就不多说了,很容易读懂,接下来讲些比较有用的,用[* for i in *]的形式改写上面的代码,看起比较简洁一点,第一个 * 为映射函数,其输入为后面 i 指代的内容,第二个 * 表示迭代的对象。这样是不是看起来简洁多了。

L = []
def my_func(x):
    return 2*x

# for i in range(5):
#     L.append(my_func(i))

#print(L)##[0, 2, 4, 6, 8]
[L.append(my_func(i))for i in range(5)]
print(L)#[0, 2, 4, 6, 8]

1.2 匿名函数简化代码,下面是相关的例子

my_func = lambda x:2*x
print(my_func(3))#6

my_func = lambda a,b:a+b
print(my_func(5,6))#11

1.3 zip与enumerate
zip就是用来打包,不是有些压缩包的格式就是zip吗?上例子。

L1,L2,L3 = list('123'),list('abc'),list('789')
new_list =list(zip(L1,L2,L3))
print(new_list)##[('1', 'a', '7'), ('2', 'b', '8'), ('3', 'c', '9')]

解压缩:利用 * 操作符和 zip 联合使用来进行解压操作

L1,L2,L3 = list('123'),list('abc'),list('789')
new_list =list(zip(L1,L2,L3))
#print(new_list)
un_zip = list(zip(*new_list))
print(un_zip)##[('1', '2', '3'), ('a', 'b', 'c'), ('7', '8', '9')]

enumerate 枚举迭代,把列组当中的位置信息绑定

L1= list('abc')
for index,value in enumerate(L1):
    print(index,value)
# 0 a
# 1 b
# 2 c

2、 Numpy基础
2.1构建数组
一般是通过arry来构建,废话不多说,上代码。

import numpy as np
a=np.array([2,3,4],dtype=np.int64)
print(a.dtype)##int64
print(a)
"""
[2 3 4]
"""
a=np.array([[2,3,4],
            [2,5,6] ],dtype=np.int64)

print(a.dtype)#int64
print(a)
"""
[[2 3 4]
 [2 5 6]]
"""

2.2 下边是一些特殊矩阵的的构造
在这里插入图片描述2.3随机种子
随机种子的这个概念,本人经常用到,看到这也就顺手做个笔记写上吧
在这里插入图片描述2.4数组的变形与合并

这里主要用到了线性代数的知识,转置对应的符号为.T,合并对应的np.r_[ ]np.c_[ ]分别表示上下合并和左右合并,其实在这里,我一直把上下合并和左右合并搞混淆(我这脑子。。。。)

2.5维度变化reshape
简单点说就是把数组变成你想要的形式,有两种模式之分,C 和 F, 分别代表以逐行和逐列的顺序进行填充读取。默认按行进行,上代码。
小tipa.reshape(4,-1)等价于a.reashape(4,2),这点和TensorFlow中reshape有些类似,当然Tf中维度的变换更加灵活。

import numpy as np
a = np.arange(8).reshape(2,4)
print(a)
"""
[[0 1 2 3]
 [4 5 6 7]]
"""
new_a = a.reshape((4,2),order='c') ##行读取和填充
print(new_a)
"""
[[0 1]
 [2 3]
 [4 5]
 [6 7]]
"""
new_a = a.reshape((4,2),order='F')#按列读取和填充
print(new_a)
"""
[[0 2]
 [4 6]
 [1 3]
 [5 7]]
"""

2.6切片和索引

利用 np.ix_ 在对应的维度上使用布尔索引,这个没用过!Mark一下,此时不能使用slice切片。
在这里插入图片描述
在这里插入图片描述
2.7 常用函数
where 一种条件函数,当满足或不满足设定的条件可以在相应的位置上进行操作
nonzero 返回非零索引
argmax 返回最大数索引
argmin 返回最小数索引
any 当序列至少存在一个True或者非零元素时就返回True,否则返回False,用法a.any(),a为序列
all 全为True或者全为非零元素时 ,返回True,用法a.all(),a为序列

2.8广播机制
当一个标量和数组进行运算时,标量会自动把大小扩充为数组大小,之后进行逐元素操作上代码:

import numpy as np
a = np.ones((2,2))
res = 3*a +1
print(res)
"""
[[4. 4.]
 [4. 4.]]
"""

二维数组之间的操作,是是对应元素进行相关的操作,(注意这里不是矩阵的计算),上代码:

res = np.ones((3,2))
print(res)
a=np.array([[2],
           [3],
           [4]])
#print(a)
"""
[[2]
 [3]
 [4]]
"""
new_res = res*a
print(new_res)
"""
[[2. 2.]
 [3. 3.]
 [4. 4.]]
 """

在这里插入图片描述2.9 向量与矩阵的计算
向量的内积使用dot
在这里插入图片描述

a = np.array([1,2,3])
b= np.array([1,3,5])
print(a.dot(b))#22

矩阵的乘法,使用符号@,注意线性代数中规定的相乘的条件 ,具体使用如下:
在这里插入图片描述

a = np.arange(4).reshape(2,2)
b = np.arange(-4,0).reshape(2,2)
res = a @ b
print(res)
"""
[[ -2  -1]
 [-14  -9]]

"""

3、习题

3.1一般的矩阵乘法根据公式,可以由三重循环写出:请将其改写为列表推导式的形式。
在这里插入图片描述解:直接上代码吧,说实话,我自己做的错了,忘了矩阵相乘变换位置最后结果也要变,哈哈哈哈直接上正确答案吧

M1 = np.random.rand(2,3)
M2 = np.random.rand(3,4)
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])]
print((((M1@M2-np.array(res)))<1e-15).all())##True

3.2
在这里插入图片描述
解:

A = np.arange(1,10).reshape(3,3)
print(A)
B1 = (1/A)
#print(B1)
B2 =B1.sum(axis=1)
#print(B2)
B3 = B2.reshape(3,1)
#print(B3)
B = A*B3

print(B)
"""
[[1.83333333 3.66666667 5.5       ]
 [2.46666667 3.08333333 3.7       ]
 [2.65277778 3.03174603 3.41071429]]

"""

3.3
在这里插入图片描述
解:直接照着公式打

A = np.random.randint(10, 20, (8, 5))
B = A.sum(0)*A.sum(1).reshape(-1, 1)/A.sum()
res = ((A-B)**2/B).sum()
print(res)

3.4在这里插入图片描述解:不太会,参考的答案。
在这里插入图片描述在这里插入图片描述3.5
输入一个整数的 Numpy 数组,返回其中递增连续整数子数组的最大长度。例如,输入 [1,2,5,6,7],[5,6,7] 为
具有最大长度的递增连续整数子数组,因此输出 3;输入 [3,2,1,2,3,4,6],[1,2,3,4] 为具有最大长度的递增连
续整数子数组,因此输出 4。请充分利用 Numpy 的内置函数完成。(提示:考虑使用 nonzero, diff 函数)
解:
要是连续的话前后差是1。
我的

a = np.array([1,2,3,8,6])
b = np.r_[1,np.diff(a)!=1,1]
#print(b)
c = np.nonzero(b)

print(np.diff(c).max())###3

参考答案:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值