我想知道为什么我找不到沿着复杂张量/数组/矩阵的任何维度映射自定义pytorchnumpy变换的实用程序。
我想我记得R中有这样的东西。有了这个幻想tch.map实用程序,你可以这样做:

>>> import torch as tch # or numpy

>>> # one torch tensor
>>> a = tch.tensor([0, 1, 2, 3, 4])
>>> # one torch function (dummy) returning 2 values
>>> f = lambda x: tch.tensor((x + 1, x * 2))
>>> # map f along dimension 0 of a, expecting 2 outputs
>>> res = tch.map(f, a, 0, 2) # fantasy, optimized on CPU/GPU..
>>> res
tensor([[1, 0],
        [2, 2],
        [3, 4],
        [4, 6],
        [5, 8]])
>>> res.shape
torch.Size([5, 2])

>>> # another tensor
>>> a = tch.tensor(list(range(24))).reshape(2, 3, 4).type(tch.double)
>>> # another function (dummy) returning 2 values
>>> f = lambda x: tch.tensor((tch.mean(x), tch.std(x)))
>>> # map f along dimension 2 of a, expecting 2 outputs
>>> res = tch.map(f, a, 2, 2) # fantasy, optimized on CPU/GPU..
tensor([[[ 1.5000,  1.2910],
         [ 5.5000,  1.2910],
         [ 9.5000,  1.2910]],

        [[13.5000,  1.2910],
         [17.5000,  1.2910],
         [21.5000,  1.2910]]])
>>> res.shape
torch.Size([2, 3, 2])

>>> # yet another tensor
>>> a = tch.tensor(list(range(12))).reshape(3, 4)
>>> # another function (dummy) returning 2x2 values
>>> f = lambda x: x + tch.rand(2, 2)
>>> # map f along all values of a, expecting 2x2 outputs
>>> res = tch.map(f, a, -1, (2, 2)) # fantasy, optimized on CPU/GPU..
>>> print(res)
tensor([[[[ 0.4827,  0.3043],
          [ 0.8619,  0.0505]],

         [[ 1.4670,  1.5715],
          [ 1.1270,  1.7752]],

         [[ 2.9364,  2.0268],
          [ 2.2420,  2.1239]],

         [[ 3.9343,  3.6059],
          [ 3.3736,  3.5178]]],


        [[[ 4.2063,  4.9981],
          [ 4.3817,  4.4109]],

         [[ 5.3864,  5.3826],
          [ 5.3614,  5.1666]],

         [[ 6.6926,  6.2469],
          [ 6.7888,  6.6803]],

         [[ 7.2493,  7.5727],
          [ 7.6129,  7.1039]]],


        [[[ 8.3171,  8.9037],
          [ 8.0520,  8.9587]],

         [[ 9.5006,  9.1297],
          [ 9.2620,  9.8371]],

         [[10.4955, 10.5853],
          [10.9939, 10.0271]],

         [[11.3905, 11.9326],
          [11.9376, 11.6408]]]])
>>> res.shape
torch.Size([3, 4, 2, 2])

相反,我一直发现自己弄乱了复杂的tch.stacktch.squeezetch.reshapetch.permute 等等 ,计算我手指上的尺寸不会迷路。

这样的实用程序是否存在而且由于某种原因我错过了它?
由于某些原因,这样的实用程序是不可能实现的吗

  ask by iago-lito translate from so

本文未有回复,本站智能推荐:

1回复

此代码是否有Numpy或pyTorch函数?

基本上有一个 Numpy 或 PyTorch 函数可以做到这一点: 鉴于vp_sa_s的大小为(10,5,5)并且每个值都是一个有效的索引 vp,即在 0-9 范围内。 vp 大小为(10,1) ,带有一堆随机值。 Matlab 使用vp(mdp_data.sa_s)优雅而快速地完成它,它将形成
1回复

如何通过pytorch有效地求解二次方程组?

我需要求解如下所示的非线性方程组: C的维数大约是10,这个方程组最多可以求解10亿次,所以最好通过torch来实现,这样才能利用GPU。 有没有比梯度下降更好的方法?
2回复

对于较大的交叉或外部产品,NumPy比PyTorch更快

我正在计算大小为(50500,)向量之间的巨大外(50500,)并发现 NumPy 在这样做时比 PyTorch 快(很多?)。 以下是测试: 理想情况下,我希望在 PyTorch 中完成计算。 那么,如何加快 PyTorch 中为如此巨大的向量计算外积的速度? 注意:我试图将张量移动到 GPU,但
3回复

从NumPy或PyTorch中的矩阵获取对角线“条纹”

我需要得到矩阵的对角线“条纹”。 假设我有一个大小为 KxN (K>N) 的矩阵: 我需要从中提取对角条纹,在这种情况下,是通过截断原始矩阵创建的矩阵 MxV 大小: 所以结果矩阵是: 我可以像这样定义一个 bolean 掩码: 但我不知道如何为任意 KxN 矩阵(例如 39x9、360x96
1回复

在Numpy/PyTorch中矢量化生成一批随机旋转矩阵的最佳方法?

我想根据初始起始矩阵(其形状为(4096, 3) )生成批量随机旋转的矩阵,其中应用于批次中每个矩阵的旋转是从一组中随机选择的旋转矩阵(在我原帖的代码中,我只想从 8 个可能的旋转角度中随机选择)。 因此,我最终得到的是一个形状为(batch_size, 4096, 3)的张量。 我目前的方法是预先
1回复

pytorch:如何在4-d张量的所有单元格上应用函数

我试图在具有以下维度的 4-D 张量(我认为它是一个 2-D 矩阵,每个单元格中有一个 2-D 矩阵)上应用一个函数:[N x N x N x N]。 apply 函数返回 [1 x N] 张量,因此在 apply 函数之后,我期待以下维度的张量:[N x N x 1 x N]。 示例:让我们定义
1回复

2D数组作为Pytorch中的索引

我想使用一组规则来“增长”矩阵。 规则示例: 增长矩阵的示例: 这是我一直试图在Pytorch中工作的代码 我似乎无法在这一行中以与Numpy中相同的方式选择索引: 有没有办法在Pytorch中执行以下操作?
2回复

将一个numpy3-d矩阵切成2-d矩阵

我有一个3d numpy矩阵t如下,随机生成: 我想提取一个二维矩阵,使得结果沿着三维矩阵的列切片。 就像是: 我怎么能这样切片? 谢谢您的帮助。