gpt4 book ai didi

python - 将 torch 张量从 [10,200,1] reshape 为 [2000,1,1] 时出现问题

转载 作者:行者123 更新时间:2023-12-01 09:24:39 24 4
gpt4 key购买 nike

我在尝试 reshape 尺寸为 [10,200,1] 到 [2000,1,1] 的 torch 张量 Yp 时遇到问题。张量是从维度为 [2000,1] 的 numpy 数组 y 获得的。我正在执行以下操作:

Yp = reshape(Yp, (-1,1,1))

我尝试通过执行以下操作将结果减去 y 的 torch 张量版本:

Yp[0:2000,0] - torch.from_numpy(y[0:2000,0])

我希望结果是一个由零组成的数组,但事实并非如此。 reshape 时调用不同的顺序(order = 'F' 或 'C')并不能解决问题,并且奇怪的是在进行减法时输出相同的结果。我只能通过调用 order = 'F' 的 ravel 方法来调用张量 Yp 来获取零数组。

我做错了什么?我想使用 reshape 来解决这个问题!

最佳答案

我同意@linamnt的评论(尽管实际生成的形状是[2000, 1, 2000])。

这是一个小演示:

import torch
import numpy as np

# Your inputs according to question:
y = np.random.rand(2000, 1)
y = torch.from_numpy(y[0:2000,0])
Yp = torch.reshape(y, (10,200,1))

# Your reshaping according to question:
Yp = torch.reshape(Yp, (-1,1,1))
# (note: Tensor.view() may suit your need more if you don't want to copy values)

# Your subtraction:
y_diff = Yp - y
print(y_diff.shape)
# > torch.Size([2000, 1, 2000])
# As explained by @linamnt, unwanted broadcasting is done
# since the dims of your tensors don't match

# If you give both your tensors the same shape, e.g. [2000, 1, 1] (or [2000]):
y_diff = Yp - y.view(-1, 1, 1)
print(y_diff.shape)
# > torch.Size([2000, 1, 1])

# Checking the result tensor contains only 0 (by calculing its abs. sum):
print(y_diff.abs().sum())
# > 0

关于python - 将 torch 张量从 [10,200,1] reshape 为 [2000,1,1] 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50532286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com