python-3.x - 使用 Pytorch 如何定义带有索引和相应值的张量

标签 python-3.x pytorch sparse-matrix

问题

我有一个索引列表和一个值列表,如下所示:

i = torch.tensor([[2, 2, 1], [2, 0, 2]])
v = torch.tensor([1, 2, 3])

我想定义一个(示例中的3x3)矩阵,其中包含索引i处的值v(1 位于 (2,2) 位置,2 位于 (2, 0)3 位置在位置(1,2)):

tensor([[0, 0, 0],
        [0, 0, 3],
        [2, 0, 1]])

我尝试过的

我可以使用 torch.sparse.to_dense() 使用技巧来做到这一点,但我觉得这不是“pytorchic”方式来做到这一点,也不是最有效:

f = torch.sparse.FloatTensor(indices, values, torch.Size([3, 3]))
print(f.to_dense())

有更好的解决方案吗? 理想情况下,我希望有一种至少与上面提供的解决方案一样快的解决方案。 当然,这只是一个示例,张量 iv 中没有假设任何特定结构(维度都没有)。

最佳答案

还有一个替代方案,如下所示:

import torch

i = torch.tensor([[2, 2, 1], [2, 0, 2]])
v = torch.tensor([1, 2, 3], dtype=torch.float)   # enforcing same data-type

target = torch.zeros([3,3], dtype=torch.float)   # enforcing same data-type
target.index_put_(tuple([k for k in i]), v)

print(target)

目标张量如下:

tensor([[0., 0., 0.],
        [0., 0., 3.],
        [2., 0., 1.]])

This medium.com blog article提供 PyTorch 张量的所有索引函数的完整列表。

关于python-3.x - 使用 Pytorch 如何定义带有索引和相应值的张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66103930/

相关文章:

python - Pandas 只删除 NaN 和 float 0.0 的行

python - 从列表末尾删除零

python - Pytorch 张量到 numpy 数组

pytorch - 在 PyTorch 中,forward() 和普通方法有什么区别?

python - 按元素乘以稀疏向量

通过这些条目的值复制稀疏矩阵中非零条目的行索引

python-3.x - 如何检查系列中的值是否唯一

python - Unicode、Python 3 和程序员之间又一场斗争。解码字符串

python - 在 Python 中高效插入交替行和列

c++ - 在 C++ 中使用 Eigen/Sparse 库,有没有办法从稀疏矩阵中删除列?