python 计算Tensor除第n维以外的所有维的平均值

flvlnr44  于 2024-01-05  发布在  Python
关注(0)|答案(4)|浏览(196)

我有一个尺寸为[7, 12, 12, 197, 197]的 Torch Tensor。我想计算平均值,使合成向量的形状为[7,1,1,197,1]。有没有其他方法而不是使用for loop?你能提供执行时间基准的答案吗?

n8ghc7c1

n8ghc7c11#

Torch提供了mean沿着dim作为参数。这个dim可以接受整数元组。

  1. import torch
  2. tensor = torch.randn(4, 5, 6, 7)
  3. dims_to_reduce = (1,3)
  4. means = torch.mean(tensor, dim=dims_to_reduce, keepdim=True)
  5. print(means.shape)
  6. >>torch.Size([4, 1, 6, 1])

字符串

aydmsdu9

aydmsdu92#

使用numpy,您可以将mean与维度/轴的元组一起用于聚合,并使用keepdims=True来保留形状:

  1. out = arr.mean((1,2,4), keepdims=True)

字符串
范例:

  1. np.random.seed(0)
  2. arr = np.random.random((7, 12, 12, 197, 197))
  3. print(arr.shape)
  4. out = arr.mean((1,2,4), keepdims=True)
  5. print(out.shape)


输出量:

  1. (7, 12, 12, 197, 197)
  2. (7, 1, 1, 197, 1)

展开查看全部
sbtkgmzw

sbtkgmzw3#

这里是一个简单的方法,使用 Torch 。意思是,请检查它是否工作。

  1. import torch
  2. tensor = torch.randn(4, 5, 6, 7) # Example tensor
  3. nth_dim = 2 # Dimension to keep
  4. means = torch.mean(tensor, dim=torch.arange(tensor.ndim) != nth_dim)
  5. print(means.shape) # Output: torch.Size([4, 6, 7])

字符串

mec1mxoz

mec1mxoz4#

这可以使用mean函数来完成,并告诉它在哪些轴上执行平均值,以及应该保持维度。pytorch中的代码与numpy中的代码非常相似,除了axis被替换为dimkeepdims被替换为keepdim

  1. import torch
  2. a = torch.rand(7, 12, 12, 197, 197)
  3. print(a.shape) # torch.Size([7, 12, 12, 197, 197])
  4. b = torch.mean(a, dim=(1,2,4), keepdim=True)
  5. print(b.shape) # torch.Size([7, 1, 1, 197, 1])

字符串
在Numpy

  1. import numpy as np
  2. rng = np.random.default_rng(42)
  3. a = rng.random((7, 12, 12, 197, 197))
  4. print(a.shape) # (7, 12, 12, 197, 197)
  5. b = np.mean(a, axis=(1,2,4), keepdims=True)
  6. print(b.shape) # (7, 1, 1, 197, 1)

展开查看全部

相关问题