CMU 11-785 recitation python中的list类型操作

import torch
import numpy as np

'''
https://github.com/cmudeeplearning11785/Spring2019_Tutorials/blob/master/recitation-0/Numpy%20%26%20PyTorch.ipynb
http://deeplearning.cs.cmu.edu/
recitation 0  
'''

'''
1.训练神经网络中可能会用到的数据格式
Python objects - pkl   
        pkl用来保存字典类型的数据,神经网络模型中的weights权值就是字典,在训练过程中可以保存到
        .pkl文件中,以防止程序突然终止时,断点处的模型参数被保存下来
Numeric data - npz
Multi-data - csv
        读取表格文件
Plain text - txt
Large Datasets - HDF5
'''
import pickle
obj = { 'age':23,'hobbies':['photography','running','travelling'] }
pickle.dump(obj,open('dict.pkl','wb'))#将字典写入当前运行目录下的dict.pkl文件中
obj2=pickle.load(open('dict.pkl','rb'))
print(obj2)#{'age': 23, 'hobbies': ['photography', 'running', 'travelling']}

import csv
import pprint
with open('F:\\2\\2.csv','r') as csvfile:
    reader=csv.reader(csvfile,delimiter=',')
    for row in reader:
        print(row)
'''
['1', '20', 'chen']
['2', '30', 'li']
将当前的csv文件读取成列表格式,列表中的每个元素表示将当前行中所有元素(用逗号分隔开)
'''

'''
2.训练神经网络所需要的数据在内存中是什么形式   data containers数据容器
lists - generic container , numeric indexing
tuples - immutable lists
dictionaries - key-value organisation
sets - collection of unique elements

使用torch.utils.data.dataloaders加载得到的batch size训练数据是一个tuple类型
tuple中的每个元素是一个torch.tensor  所有torch.tensor的shape[0]都等于batch size
这一点对于神经网络是CNN的情况,会输入 [batch size,channel_num,H,W]的彩色图像
而如果需要将一个batch size的数据送入RNN/LSTM,则需要注意RNN所要求的数据的输入在
第1个dimension上
'''

'''
小结:python中对于列表的操作
在训练深度学习模型的预处理过程中经常会用到
'''
homo_list = [12,45,900,78,34,66,17,85]
#(1)list的复制和扩充
l1=homo_list*2
#表示将原始列表复制一遍,再将复制之后的列表append到原始列表的后面
#这个操作后列表的长度将会变成之前的2倍,而并不是像所想象的那样:列表中的所有元素数值变成之前的2倍
#对于numpy中的数组进行这样的*2操作则是将数组中的每个元素数值乘2

#(2)两个list相加
hetero_list = [10,'foo',1.3]
l2=homo_list+hetero_list
#将后面一个列表中的元素append到前面的列表中,

print(l1)
print(l2)
'''
[12, 45, 900, 78, 34, 66, 17, 85, 12, 45, 900, 78, 34, 66, 17, 85]
[12, 45, 900, 78, 34, 66, 17, 85, 10, 'foo', 1.3]
'''
#(3)sorted, sum,max,min    operator(list)
#(4)list切片  sliced_list = [ start_idx : end_idx+1 : step]
'''
start_idx   所希望取出的元素下标
end_idx  所希望取出的元素下标(边界) 注意:右边边界(end_idx+1)不可达
step   步长
'''
print(homo_list)
print(homo_list[:5])#取出索引下标   0 1 2 3 4 共5个元素
print(homo_list[-1:0:-2])#-1表示列表中最后一个元素的下标,从后向前取,则下下标步长为负数
'''
[12, 45, 900, 78, 34, 66, 17, 85]
[12, 45, 900, 78, 34]
[85, 66, 78, 45]
'''
#(5)将列表中满足某个条件的所有元素取出
'''
*result*  = [*transform*    *iteration*         *filter*     ]
transform:对于所取出的满足条件的每个元素所进行的操作,,最后再构成新的列表
新列表的长度为原列表中满足某个条件的元素总数
iteration:对列表中的每个元素进行遍历
filter:过滤出从原列表中取出的某个元素是否满足条件
res = [ manipulation(instance[2]) for instance in sorted_dataset ]
manipulation可以理解为对于数据进行的某种操作
'''
res=[no for no in homo_list if no>50]
print(res)#[900, 78, 66, 85]

import time
start1=time.time()
out1=[i for i in range(100000)]
end1=time.time()
out2=[]
for i in range(100000):
    out2.append(i)
end2=time.time()
print('time1 with list comprehension',end1-start1,'time2 for general loop',end2-end1)
#time1 with list comprehension 0.006974697113037109 time2 for general loop 0.015011310577392578
#使用list comprehension机制比一般的for循环速度快很多(尤其是所需要处理的数据量较大时)


import pdb


def pairwise_generator(input_data):
    pdb.set_trace()
    for i in range(0, len(input_data), 2):
        yield (input_data[i], input_data[i + 1])


data = [1, 'one', 2, 'two', 3, 'three', 4, 'four']
generator = pairwise_generator(data)
for elt in generator:
    print(elt)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值