Python 计算Pytorch中张量大小不等块和的有效方法

Python 计算Pytorch中张量大小不等块和的有效方法,python,numpy,sum,vectorization,pytorch,Python,Numpy,Sum,Vectorization,Pytorch,我想知道是否有一种方法可以计算pytorch中张量的大小不等的块的总和 import torch import numpy as np x = torch.rand(1000,100) y = np.unique(np.random.choice(1000,10) 这里我有一个大小为(1000,10)的张量x,我想计算沿着第一轴的夹头总数。这些块沿第一个轴分割,y表示每个块的结束线。它们一般大小不等。例如,我可以使用下面的For循环来实现这一点 cum_pos_lik = torch.Flo

我想知道是否有一种方法可以计算pytorch中张量的大小不等的块的总和

import torch
import numpy as np

x = torch.rand(1000,100)
y = np.unique(np.random.choice(1000,10)
这里我有一个大小为(1000,10)的张量x,我想计算沿着第一轴的夹头总数。这些块沿第一个轴分割,y表示每个块的结束线。它们一般大小不等。例如,我可以使用下面的For循环来实现这一点

cum_pos_lik = torch.FloatTensor(y.size, 100)
y = np.append(0, y)
for i in range(1, y.size):
    cum_pos_lik[i-1, :] = x[y[i-1]:y[i], :].sum(0)
但我需要这对我的应用程序更快。显然,每个块的总和可以并行化。我想知道pytorch中是否有一种简单的方法可以做到这一点。如果能提供一种在numpy中对其进行矢量化的方法,那也会很好


谢谢大家!

我想你应该使用
y=np.random.choice(1000,size=10,replace=0)
来确保你在
y
中有10个元素。是的,谢谢。我使用了np.unique()。我只是在编一个简单的例子来说明我的问题。另一方面,我应该允许长度为零的块。无论如何,这只是一个简单的例子。不完全是重复的,但非常相似:。此解决方案适用于块大小不等的用户,但一些快速测试表明,与循环版本相比,它不会有太大的速度提升。不过,这可能取决于您的具体用例。@CiaoNeuner切片操作已经非常有效,然后求和的速度就足够快了。我建议保留这个版本。我想你应该使用
y=np.random.choice(1000,size=10,replace=0)
来确保你在
y
中有10个元素。是的,谢谢。我使用了np.unique()。我只是在编一个简单的例子来说明我的问题。另一方面,我应该允许长度为零的块。无论如何,这只是一个简单的例子。不完全是重复的,但非常相似:。此解决方案适用于块大小不等的用户,但一些快速测试表明,与循环版本相比,它不会有太大的速度提升。不过,这可能取决于您的具体用例。@CiaoNeuner切片操作已经非常有效,然后求和的速度就足够快了。我建议保留这个版本。