pytorch的tensor与numpy数组共享值

网上的很多博客说tensor与numpy数组共享内存,这是错误的
先给结论:tensor与numpy数组共享部分内存,说共享值更严谨,且有条件
看代码:
a = torch.ones(2,2)
b = a.numpy()
print(id(a))
print(id(b))
输出:
3030786996336
3030755215040
解析:在Cpython里面,a,b是C指针,torch.ones(2,2)构造生成一个tensor实例,放入一片内存区域,指针a指向这片内存区域,构造生成的tensor对象内部又有多个指针,指向不同的内存区域,其中有一个指向数组的指针tv_ptr,a.numpy()构造生成一个numpy对象,且这个numpy对象内部也有多个指针,其中也有一个指向数组的指针nv_ptr,仅这两个指针指向同一内存区域,并非所有指针都共享内存,b指针指向构造生成的numpy对象

共享值的条件:
tensor对象的操作必须是在原内存区域上的操作,numpy对象的操作也是在原对象内存区域上的操作,2者如何在原内存区域上操作而不是指向新的内存区域,看我上两篇博客

猜你喜欢

转载自blog.csdn.net/qq_33345917/article/details/86552403