如何更新匹配维度向量的张量

Posted

技术标签:

【中文标题】如何更新匹配维度向量的张量【英文标题】:How to update tensors matching dimensionwise vectors 【发布时间】:2021-08-07 11:11:18 【问题描述】:

假设有两个二维张量,A (m × c) 和 B (n × c)。属于 B 的每个行向量也属于 A 即。此外,A 中的行向量不是唯一的,即 A 可能有重复的行。但是,B 中的行向量是唯一的。

还有另一对张量 P (m × f) 和 Q (n × f)。我正在尝试执行以下操作

for i in range(B.shape[0]):
    rv = B[i, :]
    fv = Q[i, :]
    # P[<row indexes of A matching rv>, :] = fv
    如何正确执行此操作? 是否可以摆脱 for 循环?

【问题讨论】:

【参考方案1】:

您可以使用以下掩码:

for i in range(B.shape[0]):
    rv = B[i]
    fv = Q[i]
    mask = torch.where((A == rv).all(dim=1))[0]
    P[mask] = fv

【讨论】:

谢谢。有什么方法可以完全摆脱 for 循环? @tachyon 因为您需要在A 中查找B 中的每一行,所以我想不出任何可以避免底层for 循环的方法。

以上是关于如何更新匹配维度向量的张量的主要内容,如果未能解决你的问题,请参考以下文章

Recurrentshop 和 Keras:多维 RNN 导致维度不匹配错误

维度不匹配:数组 'cov' 的形状为 (1, 1),但 'mean' 是长度为 2 的向量

如何在 Keras / Tensorflow 中将(无,)批量维度重新引入张量?

张量(Tensor)标量(scalar)向量(vector)矩阵(matrix)

Pytorch 重塑张量维度

张量(tensor)的阶、形状、数据类型