首先比较一下Python列表(list)、Numpy数组(ndarray)、Tensorflow张量(Tensor)之间的区别:
       >>  Python列表:
       		元素可以使用不同的数据类型,可以嵌套
       		在内存中不是连续存放的,是一个动态的指针数组
       		读写效率低,占用内存空间大
       		不适合做数值计算
       	>> Numpy数组:
       		 元素数据类型相同
       		 每个元素在内存中占用的空间相同,存储在一个连续的内存区域中
       		 存储空间小,读取和写入速度快
       		 不能够主动检测利用GPU进行运算,只能运行在CPU上
       	>> TensorFlow张量
       	      可以高速运行于GPU和TPU之上,实现神经网络和深度学习中的复杂算法
    
       *** 张量和numpy数组:
          ① 张量可看成将numpy数组进一步封装,使其可以执行TensorFlow中的API,且可以运行与GPU/TPU;
          ② 在TensorFlow中,所有运算都是在张量之间进行的; Numpy数组仅仅是作为输入和输出使用,不参与运算;
          ③ 张量可以运行于CPU /GPU/TPU; 而Numpy数组只能运行在CPU中。

1、创建Tensor对象tf.constant()函数

张量由Tensor类实现,每个张量都是一个Tensor对象。
 
函数格式:tf.constant(value, dtype, shape)
                value:  可以是数字、Python列表、numpy数组、布尔型、字符串等
                dtype:  元素的数据类型
                shape: 张量的形状

Python 张量的行数 python张量运算_数据类型


注意点:

1、TensorFlow2中的所有张量,都可以通过 .numpy()的方法,得到它对应的数组
2、TensorFlow创建浮点数张量时,默认是32位浮点数;
3、输出的形状shape=()表示是0维张量/数字/标量;
4、numpy创建浮点数组时,默认是64位浮点数,当使用numpy数组创建张量时,
TensorFlow会接受numpy数组元素的数据类型,使用64位浮点数保存数据
5、布尔型转换为整数--》 0:False, 1:True;
6、整型变量装换为布尔型,将非0数字都视为True; 0视为False。

示例:

import tensorflow as tf
import numpy as np

tf1 = tf.constant([[1,2],[3,4]])   # 1、参数为Python列表
#print(tf1)
#print(tf1.numpy())   # 2、TensorFlow2中的所有张量,都可以通过 .numpy()的方法,得到它对应的数组

tf2 = tf.constant(1.0)  # 3、参数为数字   --> 也可以写成 tf.constant(1.)
print(tf2)              # 4、 TensorFlow创建浮点数张量时,默认是32位浮点数;输出中 shape=()表示是0维张量/数字/标量

tf3 = tf.constant(np.array([1,2]))   #  5、参数为numpy数组。 numpy创建浮点数组时,默认是64位浮点数,当使用numpy数组创建张量时,TensorFlow会接受numpy数组元素的数据类型,使用64位浮点数保存数据

tf.constant(1.0, dtype=tf.float64) # 6、创建张量时,指定元素的数据类型

tf4 = tf.constant(True)  # 参数为布尔型
a = tf.constant([True,False])
# 输出:tf.Tensor([1 0], shape=(2,), dtype=int32)
print(tf.cast(a, tf.int32))  # 布尔型转换为整数--》 0:False, 1:True

b = tf.constant([0,1,-1,2])
# 输出:tf.Tensor([False  True  True  True], shape=(4,), dtype=bool)
print(tf.cast(b,dtype= tf.bool)) # 整型变量装换为布尔型,将非0数字都视为True; 0视为False

2、tf.cast()函数 — 改变张量中元素数据类型

函数格式:tf.cast(x, dtype)
 
 PS:在数据类型装换时,一般是将低精度的数据类型向高精度转换,否则可能发生数据溢出,得到错误结果。

示例:

a = tf.constant(np.array([1,2]))
b = tf.cast(a,dtype=tf.float32)
print(b.dtype)

3、tf.convert_to_tensor()函数 – 创建张量

tf.convert_to_tensor(数组/列表/数字/布尔型/字符串)

4、tf.is_tensor()函数 – 判断是否是张量

5、Python中isinstance()函数判断类型
示例:

import tensorflow as tf
import numpy as np

na = np.arange(12).reshape(3,4)
ta = tf.convert_to_tensor(na)

print(type(na))  # <class 'numpy.ndarray'>
print(type(ta))  # <class 'tensorflow.python.framework.ops.EagerTensor'>

print(tf.is_tensor(ta))   # True
print(isinstance(ta,tf.Tensor))  # True

6、创建特殊值的张量

创建全为0的张量:        tf.zeros(维度,dtype)
创建全为1的张量:        tf.ones(维度,dtype)
创建全为指定值的张量:    tf.fill(维度,指定值)

PS:  1、维度(维度也可以用小括号表示):
        一维 直接写个数
        二维 用[行,列]
        多维 用[n,m,j,k...]
        
     2、tf.fill()没有dtype参数,根据指定值自动判断数据类型。
     3、 tf.zeros()、 tf.ones()的dtype类型默认是32位浮点数.
     4、也可以使用tf.constant(指定值,shape)创建全为指定值的张量

示例:

import tensorflow as tf

tf1 = tf.ones([1,2],dtype=tf.float64)
tf2 = tf.zeros((2,2))
print(tf1)
print(tf2)

tf3 = tf.fill([2,3],9)
print(tf3)

tf4 = tf.constant(9,shape=[2,3])
print(tf4)

运行结果:
tf.Tensor([[1. 1.]], shape=(1, 2), dtype=float64)
tf.Tensor(
[[0. 0.]
 [0. 0.]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[9 9 9]
 [9 9 9]], shape=(2, 3), dtype=int32)
 tf.Tensor(
[[9 9 9]
 [9 9 9]], shape=(2, 3), dtype=int32)

7、创建随机数张量

(1) 生成正态分布的随机数,默认均值为0,标准差为1
    tf.random.normal(维度,mean=均值,stddev=标准差,dtype)
    
 (2)生成截断式正态分布的随机数(生成值在均值附近)
    tf.random.truncated_normal(维度,mean=均值,stddev=标准差,dtype)
         例如:
              tf1 = tf.random.normal([2,2],mean = 0.0,stddev = 2.0)
              tf2 = tf.random.truncated_normal([2,2])
     
(3)生成均匀分布随机数  [ minva,maxval ) 前闭后开区间
     tf.random.uniform(维度,minval=最小值,maxval=最大值,dtype)

8、tf.random.set_seed() — 设置随机种子

设置随机种子,可以产生同样的随机数张量。
   
   例如,执行下面代码多次,生成的随机数是相同的。
        tf.random.set_seed(8)
        print(tf.random.normal([2,2]))

9、tf.random.shuffle() 函数-- 随机打乱张量的第一维度

示例:

import tensorflow as tf
import numpy as np

x = tf.constant([[1,2],[3,4],[5,6]])
print(tf.random.shuffle(x))

y = [1,2,3,4,5]
print(tf.random.shuffle(y))

z = np.arange(5)
print(tf.random.shuffle(z))

运行结果:

tf.Tensor(
[[5 6]
 [1 2]
 [3 4]], shape=(3, 2), dtype=int32)
tf.Tensor([3 1 2 5 4], shape=(5,), dtype=int32)
tf.Tensor([0 3 4 1 2], shape=(5,), dtype=int64)

10、tf.range()函数 – 创建序列

函数格式: tf.range(start, limit, delta=1, dtype)
          PS:区间【start,limit) 数据范围是 前闭后开区间

示例:

import tensorflow as tf
import numpy as np

a = tf.range(10)
print(a)

b = tf.range(10,delta=2)
print(b)

运行结果:

tf.Tensor([0 1 2 3 4 5 6 7 8 9], shape=(10,), dtype=int32)
tf.Tensor([0 2 4 6 8], shape=(5,), dtype=int32)

创建张量小结:

Python 张量的行数 python张量运算_tensorflow_02

11、 Tensor对象的属性 – ndim、shape、dtype

ndim:  查看对象的维度
      shape: 对象形状
      dtype:  对象类型
    使用   变量名.属性名  访问获取。

示例:

import tensorflow as tf
a = tf.constant([[1,2],[3,4]])
print(a.ndim)
print(a.dtype)
print(a.shape)

运行结果:
2
<dtype: 'int32'>
(2, 2)

12、TensorFlow的 shape(),size(),rank()方法 — 获取张量的形状、元素总量和维度。

示例:

a = tf.constant([[1,2],[3,4]])
print(tf.shape(a))
print(tf.size(a))
print(tf.rank(a))

运行结果:
tf.Tensor([2 2], shape=(2,), dtype=int32)
tf.Tensor(4, shape=(), dtype=int32)
tf.Tensor(2, shape=(), dtype=int32)