张量tensor操作

张量建立

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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值