pytorch入门(1)

#(1)torch在进行索引时,当索引改变时,源也会改变
res  =result[0, :]
print(res)
#可以进行类似numpy的索引
#但是索引进行修改后,原项也会改变
res += 1
print(res)         #对res进行修改
print(result[0, :])#原result也发生改变

#(2)view共享内存
z = result.view(3, -1) #-1能够根据其他进行自动算出
print(result.shape, z.size()) #不仅仅z的shape改变了,同时result的size也改变了
#view()返回的新tensor与源tensor共享内存,改变一个,另外一个也会改变

#(3)共享内存导致当形状进行改变时也会改变源形状,可以使用clone创造副本再使用view
res_cp = result.clone().view(15)
#通过clone建立副本,此时改变源不会改变副本
result -= 1
print(result)
print(res_cp)
#(3)广播
x = torch.arange(1, 3).view(1, 2)
#建立从1开始到2结束的tensor
#加不加view对最后的结果还是有影响
print(x)
y = torch.arange(1, 4).view(3, 1)
print(y)
print(x + y)
#x中第一行的2个元素被广播到了第二,三行】

#(4)torch和numpy可以进行相互转换,但是共享内存机制
#[1]
#通过numpy将 tensor转为numpy
a = torch.ones(5)
b = a.numpy()
print(a, b)

a += 1
print(a, b)
#共享内存,a变b也会变,b变a也会变
b += 1
print(a, b)

#[2]
c = torch.tensor(a)
a += 1
print(a, c)
#使用torch.tensor函数进行转换,但是并不共享内存
#[3]
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
#通过torch.from_numpy,将numpy转换为torch
print(a, b)

a += 1
print(a, b)
b += 1
print(a, b)

猜你喜欢

转载自blog.csdn.net/ziqingnian/article/details/109081376
今日推荐