目录
  1. 1. list、array、set、tuple,tensor转换方式:
  2. 2. numpy ndarray 与 list 互相转换
    1. 2.1. list 转 numpy
    2. 2.2. ndarray 转 list
    3. 2.3. A.tolist和list(A)的区别
  3. 3. set转换
  4. 4. PIL打开图片格式与array格式转换
    1. 4.1. PIL image转换成array
    2. 4.2. array转换成image
  5. 5. Numpy.array与Python内置数据类型list的异同
  6. 6. Numpy.array与Numpy.matrix的异同
变量类型的转换

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
2
3
4
5
6
7
8
9
#list to tuple
lis=[1,2,3,4,5,6]
x=tuple(lis)
print(type(x),x)

#tuple to list
tup=(1,2,3,4,5,6)
y=list(tup)
print(type(y),y)

A.tolist和list(A)的区别

1
2
3
4
5
6
7
8
9
10
11
12
13
A = np.reshape(np.arange(6),(3,2)) #生成一个3行2列的array
print"数组A:",A)
print('A.tolist():',A.tolist())
print('list(A): ',list(A))

数组A:
array([[0, 1],
[2, 3],
[4, 5]])

A.tolist(): [[0, 1], [2, 3], [4, 5]]

list(A): [array([0, 1]), array([2, 3]), array([4, 5])]

可以看到: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
2
<class 'PIL.Image.Image'>
<PIL.Image.Image image mode=RGB size=224x224 at 0x241D78DB438>
  1. PIL image转换成array

1
img = np.asarray(image)

需要注意的是,如果出现read-only错误,并不是转换的错误,一般是你读取的图片的时候,默认选择的是”r”,”rb”模式有关。

修正的办法: 手动修改图片的读取状态

1
img.flags.writeable = True  # 将数组改为读写模式
  1. array转换成image

    Image.fromarray(np.uint8(img))

图像处理的常用函数: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
2
3
import numpy as np
a=np.mat('4 3; 2 1')
c=np.array([[4, 3], [2, 1]])

matrix可以有转置.T,共轭.H,逆矩阵.I;array只能用.T
点积运算:array是 * ;matrix是np.multiply()
矩阵乘:array用np.dot();matrix是*
乘介运算**:对于matrix是矩阵乘,对于array是点积
在做归约运算时,array的维数会发生变化,但matrix总是保持为2维
相互转换:numpy.asmatrix();numpy.asarray()

文章作者: HazardFY
文章链接: http://hazardfy.github.io/2019/11/16/变量类型的转换/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HazardFY's BLOG
打赏
  • 微信
  • 支付寶