张量建立
import torch
import numpy as np
from __future__ import print_function
# 创建一个 5*3 的矩阵,数值随机
x = torch.empty(5, 3)
# 创建一个随机初始化的 5*3 矩阵
rand_x = torch.rand(5, 3)
rand_x = torch.randn(5, 3)
# 创建数值皆为 0 的矩阵
# 创建一个数值皆是 0,类型为 long 的矩阵
zero_x = torch.zeros(5, 3, dtype=torch.long)
# 创建尺寸是 5*3,数值类型是 torch.double的矩阵
tensor2 = tensor1.new_ones(5, 3, dtype=torch.double)
用numpy
实现的建立
# 将(1,2)变成标量
t = torch.tensor([1, 2]) # 通过列表创建
t = torch.tensor(a = np.array((1, 2))) # a是一个numpy多维数组
# 向量构建
x = torch.arange(4)
# tensor([0, 1, 2, 3])
# 通过张量的索引来访问任一元素
x[3]
# tensor(3)
""--------------------------------------------------------------------------"""
# 创建多维张量
t = torch.tensor(np.array([[1,2,3], [4,5,6]])) # 通过列表的列表创建
# 构建一个性状为5*4的矩阵,数据从0到20
A = torch.arange(20).reshape(5, 4)
# 转置A
A.T
# 构建一个长度为24、性状为2维的3*4的张量
X = torch.arange(24).reshape(2, 3, 4)
# B复制A的张量
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone() # 通过分配新内存,将A的一个副本分配给B
属性
# 访问张量的长度
len(x)
# 4
# 访问张量的性状
x.shape
# torch.Size([4]) 因为只有一个轴(维度),所以性状只有一个元素
# 查看数据类型
t = torch.tensor([1, 2])
print(t.dtype)
# 创建张量时指定类型
t = torch.tensor([1.1, 2.7], dtype=torch.int16)
# tensor([1, 2], dtype=torch.int16)
# 获得张量的矩阵大小
tensor3.size()
基本操作
# 张量相加
torch.add(tensor3, tensor4, out=result)
# 访问 tensor3 第一列数据
tensor3[:, 0]
# 改变 tensor 的性状
# 将4*4改成2*8
x = torch.randn(4, 4)
z = x.view(2, 8)
# 相乘
torch.dot(x, y)
# 矩阵和向量相乘
# A(m, n)和x(n,)得到向量(m,)
torch.mv(A, x)
# 张量乘以或加上一个标量不会改变张量的形状,其中张量的每个元素都将与标量相加或相乘
a = 2
X = torch.arange(24).reshape(2, 3, 4)
"""--------求每列/每行元素之和-----------------------------------------------------------"""
# 计算元素的和
x.sum()
# 指定轴计算了A中元素在每列上的总和
A_sum_axis0 = A.sum(axis=0)
# 指定轴计算了A中元素在每行上的总和
A_sum_axis1 = A.sum(axis=1)
# 所有元素进行求和
A.sum(axis=[0, 1]) # 结果和A.sum()相同
"""--------计算所有元素/每列/每行元素平均值----------------------------------------------------------"""
# 得到A所有元素的平均值
A.mean()
A.sum() / A.numel()
# 计算张量A沿着0轴(每列)的元素进行求和
A.mean(axis=0)
# 计算张量A每列元素的平均值
A.sum(axis=0) / A.shape[0]
# 计算张量A每行元素的平均值,保持结果为列向量
sum_A = A.sum(axis=1, keepdims=True)
"""------点积乘法---------------------------------------------------------------"""
# 矩阵和向量相乘
# A(m, n)和x(n,)得到向量(m,)
torch.mv(A, x)
转换格式
t = torch.tensor([1, 2])
print(t.dtype)
t1 = t.float() # 转换为float32
print(t1.dtype)
t2 = t.double() # 转换为float64
print(t2.dtype)
t3 = t.short() # 转换为int16
print(t3.dtype)
t4 = t.int() # 转换为int32
print(t4.dtype)
t5 = t4.long() # 转换为int64
print(t5.dtype)
# Tensor 转换为 Numpy 数组
a = torch.ones(5)
b = a.numpy()
# Numpy 数组转换为 Tensor
# 调用 torch.from_numpy(numpy_array) 方法
a = np.ones(5)
b = torch.from_numpy(a)