张量Tensor

一、如何创建张量?

1.可以根据数据直接创建张量

x_data.shape: 这是x_data的形状(shape)。它返回一个元组,表示x_data在每个维度上的大小。例如,对于一个形状为(60000, 28, 28)的MNIST图像数据集,这意味着有60000个图像,每个图像是28x28像素的。

from mindspore import Tensor
data = [1,0,1]
x_data = Tensor(data)
print(x_data, x_data.shape, x_data.dtype)#.dtype这是一个属性,它返回张量的数据类型
print(x_data.type)#它返回张量的完整类型信息,包括数据类型

 输出:

2.可以从NumPy数组创建张量

np_array = np.array(data)
#错误:print(np_array.type)#.dtype属性用于获取数组的数据类型
print(np_array.dtype)

np_data = Tensor(np_array)
print(np_data.type)#张量用.type

输出:

 3.继承另一个张量的属性,形成新的张量

from mindspore import ops
tensor_1=ops.ones_like(x_data)
print(tensor_1)
tensor_2=ops.zeros_like(x_data)
print(tensor_2)

输出:

 4.使用init初始化器构造张量

from mindspore.common.initializer import One,Normal
#初始化一个张量,初始元素均为1
tensor1=mindspore.Tensor(shape=(3,3,3),dtype=mindspore.float32,init=One())
print("tensor1:\n",tensor1)
#从标准正态分布(均值为0,标准差为1)中抽取的随机数填充的张量。
tensor2=mindspore.Tensor(shape=(4,4),dtype=mindspore.float32,init=Normal())
print("tensor2:\n",tensor2)

 输出:

注:init主要用于并行模式下的延后初始化,在正常情况下不建议使用init对参数进行初始化。

二、张量的属性

ydata=Tensor([[2,6,3,1,1],[1,0,2,5,4]],mindspore.int32)#随手写一个张量看看它的属性
print(ydata)
print("Tensor的shape,是一个tuple; ydata.shape:",ydata.shape)
print("Tensor的dtype,是MindSpore的一个数据类型;ydata.dtype:",ydata.dtype)
print("Tensor中每一个元素占用字节数,是一个整数;ydata.itemsize:",ydata.itemsize)
print("Tensor占用的总字节数,是一个整数。ydata.nbytes:",ydata.nbytes)
print("维数ydata.ndim:",ydata.ndim)
print("Tensor中所有元素的个数,是一个整数。ydata.size:",ydata.size)
print("Tensor每一维所需要的字节数,是一个tuple。ydata.strides:",ydata.strides)

 输出:

三、张量索引

 Tensor索引与Numpy索引类似,索引从0开始编制,负索引表示按倒序编制,冒号:和 ...用于对数据进行切片,:和...用哪个都行

zdata=Tensor([[3,3,2],[2,1,1]])#不加mindspore.int32的时候
print(zdata)
print("打印第一行: {}".format(zdata[0]))
print("打印倒数第一行:{}".format(zdata[-1,:]))
print("打印第二行第二列的元素:{}".format(zdata[1,1]))
print("打印第一列:{}".format(zdata[:,0]))
print("打印最后一列:{}".format(zdata[:,-1]))

输出:

 四、张量运算(比较简单)

1.普通算术运算

普通算术运算有:加(+)、减(-)、乘(*)、除(/)、取模(%)、整除(//)

#首先,随手写两个张量
x=Tensor([1,2,3],mindspore.float32)
y=Tensor([4,5,6],mindspore.float32)
print("x:",x,"\n""y:",y)
add = x+y#对应元素相加
sub = x-y#对应元素相减
mul = x*y
div = y/x
mod = y%x#取余
floordiv=y//x#整除

print("add:",add)
print("sub:",sub)
print("mul:",mul)
print("div:",div)
print("mod:",mod)
print("floordiv:",floordiv)

 输出:

 

 2.ops.concat

ops.concat()将给定维度上的一系列张量连接起来.

x=Tensor([[1,2,3],[6,6,6],[1,1,1]],mindspore.float32)
y=Tensor([[4,5,6],[2,2,2],[3,3,3]],mindspore.float32)
print("x:",x)
print("y:",y)
output1 = ops.concat((x,y),axis=0)
print(output1)
print("x.shape:",x.shape,"\n y.shape:",y.shape,"\n output1.shape:",output1.shape)

输出:

 3.stack

ops.stack()从另一个新的维度上将两个张量合并起来.

output2=ops.stack((x,y))
print(output2)
print("x.shape:",x.shape,"\n y.shape:",y.shape,"\n output2.shape:",output2.shape)

输出:

 五、Tensor与NumPy转换

1.Tensor转换为NumPy

Tensor转换为NumPy,与张量创建相同,使用 .asnumpy() 将Tensor变量转换为NumPy变量

#print(x,"\n",x.type)
print(f"x:{x},type(x):{type(x)}")
np_x=x.asnumpy()
#print(np_x,"\n",np_x.dtype)
print(f"np_x:{np_x},type(np_x):{type(np_x)}")

 输出:

 2.NumPy转换为Tensor

NumPy转换为Tensor,使用Tensor()将NumPy变量转换为Tensor变量

print(f"np_x:{np_x},type(np_x):{type(np_x)}")
x_tensor=Tensor(np_x)
print(f"x_tensor:{x_tensor},type(x_tensor):{type(x_tensor)}")

输出:

 六、稀疏张量

1.CSRTensor

MindSpore现在已经支持最常用的CSR和COO两种稀疏数据格式。
用来表示某一Tensor在给定索引上非零元素的集合,其中行索引由 indptr 表示,列索引由 indices 表示,非零值由 values 表示。
如果 indptr 是[0, 1, 2, 2], indices 是[1, 2], values 是[1., 2.], shape 是(3, 4),那么它对应的稠密Tensor如下:
[[0., 1., 0., 0.],
 [0., 0., 2., 0.],
 [0., 0., 0., 0.]]
下面是CSRTensor的使用示例:

from mindspore import CSRTensor
indptr=Tensor([0,1,2,2])
indices=Tensor([1,2])
values=Tensor([3,4],mindspore.float32)
shape=(3,4)
# Make a CSRTensor
csr_tensor=CSRTensor(indptr,indices,values,shape)
print(csr_tensor.astype(mindspore.float64).dtype)
print(csr_tensor)

 2.COOTensor

如果 indices 是[[0, 1], [1, 2]], values 是[1, 2], shape 是(3, 4),那么它对应的稠密Tensor如下:
[[0, 1, 0, 0],
 [0, 0, 2, 0],
 [0, 0, 0, 0]]

下面是COOTensor的使用示例:

from mindspore import COOTensor
indices = Tensor([[0, 1], [1, 2]], dtype=mindspore.int32)
values = Tensor([1, 2], dtype=mindspore.float32)
shape = (3, 4)
# Make a COOTensor
coo_tensor = COOTensor(indices, values, shape)
print(coo_tensor.astype(mindspore.float64).dtype)
print(coo_tensor)

 总算把张量过了一遍咯~~~

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值