Pytorch 为什么Pytork是;“摧毁”;我的numpy阵列?

Pytorch 为什么Pytork是;“摧毁”;我的numpy阵列?,pytorch,tensor,Pytorch,Tensor,我正在研究形状的numpy张量(N,2128128) 当试图将这些图像形象化(我通过ifft2重建)时,numpy和pyTorch似乎以一种疯狂的方式把事情搞混了 我已经用小的虚拟数组进行了检查,当我将一个numpy数组传递给torch.FloatTensor时,在相同的位置(相同的形状!)上的值是完全相同的,但是当我尝试对torch张量进行ifft2时,结果与非torch张量上的结果不同!有人能帮我弄明白吗 一个小的可重复的例子是: x=np.random.rand(3,2,2,2) xTor

我正在研究形状的numpy张量(N,2128128)

当试图将这些图像形象化(我通过ifft2重建)时,numpy和pyTorch似乎以一种疯狂的方式把事情搞混了

我已经用小的虚拟数组进行了检查,当我将一个numpy数组传递给torch.FloatTensor时,在相同的位置(相同的形状!)上的值是完全相同的,但是当我尝试对torch张量进行ifft2时,结果与非torch张量上的结果不同!有人能帮我弄明白吗

一个小的可重复的例子是:

x=np.random.rand(3,2,2,2)
xTorch=torch.FloatTensor(x)

#visualize then in the interpreter, they are the same!
#
#now show the magnitude of an inverse fourier transform
plt.imshow(np.abs(np.fft.ifft2(xTorch[0,0,:,:]+1j*xTorch[0,1,:,:])))
plt.show()

plt.imshow(np.abs(np.fft.ifft2(x[0,0,:,:]+1j*x[0,1,:,:])))
plt.show()

#they are not the same ! What is the problem!?
我发现如果我使用:torch.Tensor.cpu(xTorch.detach().numpy(),我可以得到相同的结果,但这意味着什么

附言。 另外,请注意,我知道正确的可视化是x,而不是xTensor,所以当我进行ifft2时,torch似乎正在改变一些东西。。或者当我重建2个通道时…或者可能有复杂数字的问题/错误。。。
如果你看看里面:
np.abs(np.fft.ifft2(x[0,0,:,:]+1j*x[0,1,:,:,:])
和xTorch一个,值是如此的不同,这不仅仅是一个浮点错误的问题,而是一个严重的问题,但我搞不懂,这让我发疯。

哦,我想我自己发现了:pyTorch不懂虚数,所有的虚数都是0。。。但在我看来,这是一种疯狂的行为。一条错误消息会更好。。。但是我仍然不明白.cpu().detach()如何恢复被破坏的想象。如果将复杂的numpy数组转换为float,那么也会得到零:
(1j*x[0,1,:,:]).astype(np.float)
。恢复使用
.cpu().detach()销毁的号码是什么意思?你能提供一个代码示例吗?顺便说一句,你可以跟踪w.r.t.复数积分的进度。哦,我想我自己发现了:pyTorch不懂虚数,所有的虚数都是0。。。但在我看来,这是一种疯狂的行为。一条错误消息会更好。。。但是我仍然不明白.cpu().detach()如何恢复被破坏的想象。如果将复杂的numpy数组转换为float,那么也会得到零:
(1j*x[0,1,:,:]).astype(np.float)
。恢复使用
.cpu().detach()销毁的号码是什么意思?你能提供一个代码示例吗?顺便说一句,您可以跟踪w.r.t.复数的集成进度。