1.List:列表
可以存储不同数据类型,有序、可变、不唯一、列表元素可以是不同数据类型
2.np.array数组
python中没有数组的概念,通过np包导入数组,和列表一样有序、可变、不唯一,但是数组元素必须是相同数据类型,要求输入的数据类型应该是统一的。如果输入数据类型不统一,则会尝试将其转换为统一的数据类型。例如,如果输入包含数字和字符串,则所有元素都将转换为字符串类型。并且同一级别上所有数组必须有相同大小。
运算上区别:
例如:b = np.array([[3,4,'xy'],[1,2,'ds']]) 类型都是'str'
数组支持逐元素操作,列表不行
array = np.array([3, 6, 9, 12]) division = array/3 正确
list = [3, 6, 9, 12] division = list/3 报错
3.Tensor张量
可以在GPU上运行,其他两者不行;
Tensor可以和 List、np.array互相转换;
4.类型转化
1)np.array --> list
b = np.array([[3,4,'xy'],[1,2,'ds']])
l1 = list(b) #创建一个新列表,列表元素是数组
l2 = b.tolist() #创建一个新列表
print(l1)
print(l2)
out:
[array(['3', '4', 'xy'], dtype='<U11'), array(['1', '2', 'ds'], dtype='<U11')]
[['3', '4', 'xy'], ['1', '2', 'ds']]
2)list -->np.array
array = np.array(list) 要注意数组限制
3)list-->Tensor
tensor = torch.tensor(list,dtype=)
4)np.array-->Tensor
tensor = torch.from_numpy(ndarray)
5)Tensor --> list
先转numpy,后转list
list = tensor0.numpy().tolist()
6)Tensor --> numpy
ndarray = tensor0.numpy()
*gpu上的tensor不能直接转为numpy
ndarray = tensor0.cpu().numpy()
!!!存储方式小tips
内存中是相同数据类型的数据被存储在一起。列表中的每个元素都有自己的内存地址,而这些地址以指针的形式存储在列表的内存块中。创建一个列表,保存的实际上是这些元素的指针。
而数组每个元素都具有相同的数据类型,因此不需要为每个元素单独存储类型信息;