python中list和numpy中array,matrix的全面辨析

list是python中的普通列表对象,而array和matrix是python numpy库中封装的两个对象,array就是我们常说的数组,matrix是矩阵。本文先探讨list、array和matrix的异同,然后分析一下在tensorflow中,创建的随机变量属于哪种类型。

1、list

list可以明显的与array,matrix区别开来。list通过[ ]申明,支持append和expend等方法,没有shape属性。使用如下:
append( ):

data = []
data.append([1,2])
print(data)

输出:

[[1, 2]]

extend( ):

data.extend([1,2])
print(data)

输出:

[[1, 2], 1, 2]

可以看出,append( )和extend( )虽然都是连接list,但是append( )是将[1, 2]整体作为一个对象,添加到list中,而extend是将[1, 2]分别作为1和2两个序列,添加到list中。

2、array和matrix

它俩都有shape属性,但是matrix只能是二维的,shape只有行和列属性,而array可以是n维的。
乘法:
array的*就是对应元素相乘,如果行或列数不匹配会自动补全,这就是numpy的”广播”。
array想要实现矩阵相乘,使用np.dot(array1, array2)
matrix的*就是矩阵相乘。
matrix想要实现对应元素相乘,使用np.multiply(mat1, mat2)

3、总结list、array和matrix的区别

list是Python中的普通列表对象,支持append和attend操作,没有shape属性;array和matrix是numpy数据库中的对象,不支持append和attend操作,具有shape属性。

一个list中可以存放不同类型的数据,如int、float、str,或者布尔型;而array和matrix中只能存放相同类型的数据。

list不支持乘法操作;array和matrix支持乘法操作。

list对象不支持一次性读取一行或一列,只能通过指针进行元素的索引;array和matrix即支持一次性读取一行或一列,也支持通过指针来进行元素的索引。

a = [[1, 2, 3], [4, 5, 6]]
print(a[0])     # 输出:[1, 2, 3]
print(a[1])     # 输出:[4, 5, 6]
print(a[:, 0])  # 输出:TypeError: list indices must be integers or slices, not tuple
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a[0])     # 输出:[1, 2, 3]
print(a[:, 0])  # 输出:[1, 4]

4、list、array和matrix之间的转换

list变成array:np.array(list)
list变成matrix:np.mat(list)
array和matrix相互转换:np.asmatrix( )和np.asarray( )
array变成list:data.tolist( )

5、tensorflow中tf.random_( )生成的随机变量

shape为一维整数或array(数组)
tf.shape( )和tf.get_shape( )比较:都可以获取shape,但是tf.shape( )中数据类型可以是tensor,list,array;tf.get_shape( )的数据类型只能为tensor,返回的是一个tuple,可以通过data.get_shape( ) as_list( )得到一个list。

猜你喜欢

转载自blog.csdn.net/liven_zhu/article/details/80445114