list、array、set、tuple,tensor转换方式:
list转array | a1 = np.array(l1) | array转list | l1 = a1.tolist() |
---|---|---|---|
list转set(1维) | s1 = set(l1) | set转list | l1 = list(s1) |
ist转tuple | t1 = tuple(l1) | tupel转list | l1 = list(t1) |
array转set(1维) | s1 = set(a1) | set转array | a1 = np.array(s1) |
array转tuple | t1 = tuple(a1) | tuple转array | a1 = np.array(t) |
set转tuple | t1 = tuple(s1) | tuple转set | s1 = set(t1) |
numpy中的ndarray转化成pytorch中的tensor : torch.from_numpy()
pytorch中的tensor转化成numpy中的ndarray : numpy()
numpy ndarray 与 list 互相转换
list 转 numpy
np.array(a)
ndarray 转 list
a.tolist()
注意:如果使用list()函数来转化的话,会只有第一维转化成功,而其他维度任然是array的格式
1 | #list to tuple |
A.tolist和list(A)的区别
1 | A = np.reshape(np.arange(6),(3,2)) #生成一个3行2列的array |
可以看到:list(A)只是把最外层的array变成了list,但是里边的每个向量都还是array类型。
list中重复项查找和解决办法:
https://blog.csdn.net/sunshine__0411/article/details/80792970
https://blog.csdn.net/weixin_33896726/article/details/88980064
set转换
由于set中的元素必须是唯一(即hashable类型),因此转换的数据类型必须是可哈希的,
可哈希类型:tuple ,constant,str,int float
不可类型:list dict set
同理字典的key也必须是可哈希的,对于value则没有此要求。
所以归根结底,还是可变与不可变类型的问题。
注意:下表中list和array转换的方法只适用于1维,如果list中包含list那么会出现错误提示TypeError: unhashable type: ‘list’
原因:可能你会问,set 不是可以接受 list,并将其转换为 set 吗?比如set([1, 2, 3])
,注意,上文说的可哈希,不可哈希,是对可迭代类型(iterables)所存储元素(elements)的要求,[1, 2, 3]
是可迭代类型,其存储元素的类型为int
,是可哈希的,如果set([[1, 2], [3, 4]])
,[[1, 2], [3, 4]]
list of lists(list 构成的 list)自然是可迭代的,但其元素为 [1, 2]
和 [3, 4]
是不可哈希的。
enumerate会将数组或列表组成一个索引序列。使我们再获取索引和索引内容的时候更加方便如下:
for index,text in enumerate(list)):
print index ,text
PIL打开图片格式与array格式转换
PIL open()以及crop方法打开的图片格式为
1 | <class 'PIL.Image.Image'> |
1 | img = np.asarray(image) |
需要注意的是,如果出现read-only错误,并不是转换的错误,一般是你读取的图片的时候,默认选择的是”r”,”rb”模式有关。
修正的办法: 手动修改图片的读取状态
1 | img.flags.writeable = True # 将数组改为读写模式 |
图像处理的常用函数:https://blog.csdn.net/luolinll1212/article/details/82970978
Numpy.array与Python内置数据类型list的异同
Python 本身是设计为通用编程语言的,在科学计算方面远远不如MATLAB等语言。但是Python支持开发了Numpy,Numpy使Python有潜力在科学计算领域类比Matlab。numpy的array和list都可以表示多维数组,但各有优劣。list的通用性较强,通过嵌套形成多维数组,元素类型可以不同,实际存储的是数据的指针,还需另外存储指针和数据,在大数组情况下存储和吞吐效率较低;numpy的array是numpy的主要对象,专门为科学计算设计,元素类型必须相同,每个dimension称为一个axes,通过一组正整数来访问(list还可以通过负整数访问),array的操作和计算函数都是通过C编写,不受python解释器的限制,代码复杂度低,计算效率和吞吐效率高。
语法细节的不同:
寻址的形式:[1,1](只有numpy.array可以),[1] [1] (numpy.array和list都可以)
元素类型,list可以不同,numpy的array必须相同。
相互转换:numpy.array();list()
Numpy.array与Numpy.matrix的异同
numpy中还有一种数据类型matrix,matrix只能是二维的,赋值和运算与array有很多小的区别。
语法细节的不同:
赋值的形式:
1 | import numpy as np |
matrix可以有转置.T,共轭.H,逆矩阵.I;array只能用.T
点积运算:array是 * ;matrix是np.multiply()
矩阵乘:array用np.dot();matrix是*
乘介运算**:对于matrix是矩阵乘,对于array是点积
在做归约运算时,array的维数会发生变化,但matrix总是保持为2维
相互转换:numpy.asmatrix();numpy.asarray()