list是python中的普通列表对象,而array和matrix是python numpy库中封装的两个对象,array就是我们常说的数组,matrix是矩阵。本文先探讨list、array和matrix的异同,然后分析一下在tensorflow中,创建的随机变量属于哪种类型。
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中。
它俩都有shape属性,但是matrix只能是二维的,shape只有行和列属性,而array可以是n维的。
乘法:
array的*就是对应元素相乘,如果行或列数不匹配会自动补全,这就是numpy的”广播”。
array想要实现矩阵相乘,使用np.dot(array1, array2)
matrix的*就是矩阵相乘。
matrix想要实现对应元素相乘,使用np.multiply(mat1, mat2)
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]
list变成array:np.array(list)
list变成matrix:np.mat(list)
array和matrix相互转换:np.asmatrix( )和np.asarray( )
array变成list:data.tolist( )
shape为一维整数或array(数组)
tf.shape( )和tf.get_shape( )比较:都可以获取shape,但是tf.shape( )中数据类型可以是tensor,list,array;tf.get_shape( )的数据类型只能为tensor,返回的是一个tuple,可以通过data.get_shape( ) as_list( )得到一个list。