catalpa-bungei 发表于 2023-4-15 11:28:22

sum()函数

问题1.
对于list
X = [,]
如何使用sum使得返回呢?

问题2.
X.sum(dim=0)是不是要求X为tensor?我如何把list转换为tensor呢?

问题3.
有一个返回generator的函数f(x,k),然后可以求和:
sum(f(x,k) for x,k in zip(X,K))
为什么我无法让Y= (f(x,k) for x,k in zip(X,K))然后sum(Y)呢?
此外,如何将generator转换成tensor呢?

isdkz 发表于 2023-4-15 11:33:56

问题1.
对于list X = [, ],你可以使用列表推导式与zip函数将两个子列表相加,如下所示:

X = [, ]
result =
print(result)# 输出:

问题2.
是的,X.sum(dim=0)需要X为一个tensor。你可以使用PyTorch将list转换为tensor,如下所示:

import torch

X = [, ]
X_tensor = torch.tensor(X)# 将list转换为tensor
result = X_tensor.sum(dim=0)# 沿着第0个维度求和
print(result)# 输出:tensor()

问题3.
首先,回答你关于为什么不能使用以下代码的问题:

Y = (f(x, k) for x, k in zip(X, K))
sum(Y)

这是因为当你将生成器赋值给Y时,它仅仅是一个生成器对象,而不是一个实际的序列。当你尝试对其求和时,你需要将生成器转换为一个可迭代的对象。你可以将生成器转换为列表,然后对其求和,如下所示:

Y = (f(x, k) for x, k in zip(X, K))
result = sum(list(Y))

此外,要将生成器转换为tensor,你可以使用torch.tensor()函数将生成器转换为一个列表,然后将该列表转换为tensor:

import torch

Y = (f(x, k) for x, k in zip(X, K))
Y_tensor = torch.tensor(list(Y))# 将生成器转换为tensor

歌者文明清理员 发表于 2023-4-15 14:12:57

本帖最后由 歌者文明清理员 于 2023-4-15 14:15 编辑

isdkz 发表于 2023-4-15 11:33
问题1.
对于list X = [, ],你可以使用列表推导式与zip函数将两个子列表相加,如下所示 ...

没看懂https://fishc.com.cn/static/image/smiley/ARU/aru-1x-1_064.png

陶远航 发表于 2023-4-15 16:35:18

问题1:
可以使用列表解析式和内置函数sum()实现:
X = [, ]
result =
print(result)
输出:

列表解析式中,zip(*X)将X按列解压成元组的列表,然后每个元组的元素相加求和即可。

问题2:
是的,sum(dim=0)是PyTorch中Tensor对象的方法。将list转换为Tensor对象,可以使用torch.tensor()函数:
import torch

X = [, ]
X_tensor = torch.tensor(X)
result = X_tensor.sum(dim=0)
print(result)
输出:tensor()

问题3:
生成器对象只能遍历一次,因此当你在列表解析式中使用sum()函数时,生成器对象已经被耗尽了。如果要多次遍历生成器对象,可以使用列表解析式或将生成器对象转换为列表,然后再使用sum()函数。
# 使用列表解析式
Y = (f(x, k) for x, k in zip(X, K))
result = sum()
print(result)

# 将生成器对象转换为列表
Y = list(f(x, k) for x, k in zip(X, K))
result = sum(Y)
print(result)
要将生成器对象转换为Tensor对象,可以先将其转换为列表,然后使用torch.tensor()函数将列表转换为Tensor对象:
Y = (f(x, k) for x, k in zip(X, K))
Y_list = list(Y)
Y_tensor = torch.tensor(Y_list)
页: [1]
查看完整版本: sum()函数