看不懂的代码块积累_Python
001.训练样本中的enumerate
for i, (features, label) in enumerate(data_loader, 1):
print(i)
print(features)
print(label)
# enumerate将可迭代对象打包,并返回可迭代元素的索引号。关键字的基本用法示例:
L = 'abcd'
for index, value in enumerate(L):
print(index, value)
- 解释:
- 1) in enumerate(data_loader, 1),是指迭代的索引 i 从1开始赋值, in enumerate(data_loader)的索引是从默认的0开始;
- 2)for i, (features, label) 是因为pytorch中的DataLoader返回的是一个tuple,需要用(features, label)两个变量分别接收,获得两个tensor; 如果用for i, train in … ,则train 接收的是一个包含两个tensor的tuple数据
002. pycharm中导出numpy矩阵
pd.DataFrame(np_index_matrix).to_csv("saved_index_matrix.csv")
- 解释:
- 1)原理上比较容易理解,numpy变量转成pandas的DataFrame格式,并导出成csv。
- 2)pycharm 不像spyder那样可以直接复制出矩阵变量,这句话可以解决pycharm中复制变量的痛点!(以前像憨憨一样粘贴到excel中,利用粘贴分隔符解决,操作太麻烦)
003. 列表推导式 + 条件赋值 [ if else for in]
#生成一个由每个iris样本对应种类名组成的列表list 。class_name = ['setosa', 'setosa', 'setosa', 'setosa', ...]
class_name=[iris.target_names[0] if i==0.0 else iris.target_names[1] if i==1.0 else iris.target_names[2] for i in pd_iris['class']]
#第一步简化:
class_name=['A' if i==0 else 'B' if i==1.0 else 'C' for i in iris_target ]
#提供一个辅助理解的简例
L = [1,2,3,4,5,6,7]
col_list = [i*i if i %2==0 else i for i in L]
- 解释:
- 1) 这句话可以理解为创建一个分段函数,包含列表推导式与条件表达式两部分
- 2)列表推导式实现函数的映射关系, [i* i for i in L] ,建立一个列表L中元素L_i 到函数 L_i^2 的映射,实现函数的功能
- 3)条件表达式实现函数分段功能,如
c= b if a > b else a
就是一个列表表达式。 例子中看不懂的这句话,本质是一个更复杂的嵌套条件表达式,首先删掉无用的iris信息,简化为'A' if i ==0 else 'B' if i==1.0 else 'C'
,更容易看出来就是一个分段映射关系。i =0时, y= 'A'; i= 1时,y='B'; i=2时, y= 'C'
。 - 4)两者组合,实现了一个分段函数的映射关系。
-
参考:https://blog.youkuaiyun.com/m0_46262756/article/details/105506254?depth_1-
004 pandas 保存excel文件
- 待整理
https://blog.youkuaiyun.com/weixin_35757704/article/details/88180581
005 python 筛选数据【待整理】
plt.figure(figsize=(12, 8))
plt.scatter(X_vis[y == 0,0], X_vis[y == 0, 1], label="Class #0", alpha=0.5, linewidth=0.15)
plt.scatter(X_vis[y == 1, 0], X_vis[y == 1, 1], label="Class #1", alpha=0.5, linewidth=0.15)
plt.title('Original set')
解释:
- X, y 是两个numpy中的array数据,其中y是标签。常用 X[y==0]来筛选标签为0的数据,而 X[y==0, 0] 获得筛选标签为零的第0列数据,X[y==0, 1] 获得筛选标签为零的第一列数据。