NumPy数组与TenosrFlow中的张量(即tf.tensor)有很多相似地方,而且可以互相转换。下表总结了NumPy与tf.tensor的异同点。
NumPy与tf.tensor的异同点
操作类别 | NumPy | TensorFlow 2+ |
---|---|---|
数据类型 | np.ndarray | tf.Tensor |
np.float32 | tf.float32 | |
np.float64 | tf.double | |
np.int64 | tf.int64 | |
从已有数据构建 | np.array([3.2, 4.3], dtype=np.float16) | a=tf.constant([3.2, 4.3], dtype=tf.float16)#常量 v=tf.Variable([3.2, 4.3], type=tf.float16)#变量 |
x.copy() | tf.identity(x);tf.tile(a,(n,m))# 元组里的每个数值对应该轴复制次数 | |
np.concatenate | tf.concat((a,b),axis)# 待拼接的轴对应的维度数值可以不等,但其他维度形状需一致 | |
线性代数 | np.dot #内积 np.multiply(*)#逐元素相乘或哈达玛积 | tf.matmul(x, y, name=None) 或(@)#内积tf.multiply(x, y, name=None),或(*)#逐元素相乘或哈达玛积 |
属性 | x.ndim | x.ndim #查看rank |
x.shape | x.shape | |
x.size | tf.size(x) | |
改变形状 | x.reshape | tf.reshape(x,(n,(-1)))#-1表示自动计算其他维度 |
np.transpose(x, [新的轴顺序] ) | tf.transpose(x, [新的轴顺序] ) | |
x.flatten() | tf.reshape(x,[-1]);tf.keras.layers.Flatten() | |
维度增减 | np.expand_dims(arr, axis) | tf.expend_dims(a,axis) |
np.squeeze(arr, axis) | tf.squeeze(a,axis),#如果不声明axis,那么将压缩所有数值为1的维度。 | |
类型转换 | np.floor(x) | x=tf.cast(x,dtype=XX) x=x.numpy()=>np.array |
比较 | np.less | tf.less(x,threshold) |
np.less_equal | tf.less_equal(x, threshold) | |
np.greater_equal | tf.greater_equal(x, threshold) | |
随机种子 | np.random.seed | tf.random.set_seed(n) |
它们可以互相转换,具体分析如下:
- 通过使用 np.array 或 tensor.numpy 方法,可以将TensorFlow张量转换为 NumPy 数组;
- tf.convert_to_tensor把Python对象(NumPy,list、tuple等),或使用tf.constant、tf.Variable把Python对象转换为TensorFlow张量。