标签: tensor-indexing

对除第 n 个项目之外的所有项目进行切片

在张量流中,可以使用切片符号选择每第 n 个项目[::n]

但如何反其道而行之呢?我想选择除第 n 个之外的所有项目。

例如:

a = [1, 2, 3, 4, 5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

a[2::3]会导致[3, 6]

现在我想要相反的:[1, 2, 4, 5, 7, 8]

上面的数组只是一个例子。解决方案应该适用于张量流中尺寸[批量、宽度、高度、通道]的更大矩阵。选择仅在通道上完成。我的矩阵还包含非唯一的实值。我也无法将其重塑为二维以下 ( [batch, channels])

python multidimensional-array tensorflow tensor tensor-indexing

4
推荐指数
1
解决办法
2055
查看次数

对于给定条件,获取 2D 张量 A 中的值的索引,使用这些索引来索引 3D 张量 B

对于给定的二维张量,我想检索值为 的所有索引1。我期望能够简单地使用torch.nonzero(a == 1).squeeze(),这将返回tensor([1, 3, 2])。然而,相反,torch.nonzero(a == 1)返回一个 2D 张量(没关系),每行有两个值(这不是我所期望的)。然后,应使用返回的索引来索引 3D 张量的第二个维度(索引 1),再次返回 2D 张量。

import torch

a = torch.Tensor([[12, 1, 0, 0],
                  [4, 9, 21, 1],
                  [10, 2, 1, 0]])

b = torch.rand(3, 4, 8)

print('a_size', a.size())
# a_size torch.Size([3, 4])
print('b_size', b.size())
# b_size torch.Size([3, 4, 8])

idxs = torch.nonzero(a == 1)
print('idxs_size', idxs.size())
# idxs_size torch.Size([3, 2])

print(b.gather(1, idxs))
Run Code Online (Sandbox Code Playgroud)

显然,这不起作用,导致运行时错误:

RuntimeError:无效参数 4:索引张量必须与 C:\w\1\s\windows\pytorch\aten\src\TH/generic/THTensorEvenMoreMath.cpp:453 处的输入张量具有相同的维度

看来idxs不是我想象的那样,也不能按照我想的方式使用。idxs是 …

python multidimensional-array pytorch tensor tensor-indexing

1
推荐指数
1
解决办法
8859
查看次数