pytorchTensor基于列对行进行排序[重复]

e0uiprwp  于 2023-10-20  发布在  其他
关注(0)|答案(3)|浏览(128)

此问题已在此处有答案

How to sort a tensor by first dimension(2个答案)
去年就关门了。
在二维Tensor中,

tensor([[0.8771, 0.0976, 0.8186],
        [0.7044, 0.4783, 0.0350],
        [0.4239, 0.8341, 0.3693],
        [0.5568, 0.9175, 0.0763],
        [0.0876, 0.1651, 0.2776]])

如何根据列中的值对行进行排序?例如,如果我们要根据最后一列进行排序,我希望行是这样的。

tensor([[0.7044, 0.4783, 0.0350],
        [0.5568, 0.9175, 0.0763],
        [0.0876, 0.1651, 0.2776],
        [0.4239, 0.8341, 0.3693],
        [0.8771, 0.0976, 0.8186]])

最后一列中的值现在按升序排列。

hkmswyz6

hkmswyz61#

a = <your tensor>
ind = a[:,-1].argsort(dim=0)
a[ind]

argsort“返回索引,该索引按值的升序对给定维度上的Tensor沿着排序。”因此,基本上,您将对最后一列的索引进行排序,并根据这些索引对行进行重新排序。

zujrkrfu

zujrkrfu2#

t = torch.rand(5, 3)
COL_INDEX_TO_SORT = 2

# sort() returns a tuple where first element is the sorted tensor 
# and the second is the indices of the sorted tensor.
# The [1] at the end is used to select the second element - the sorted indices.
sorted_indices = t[:, COL_INDEX_TO_SORT].sort()[1] 
t = t[sorted_indices]
fslejnso

fslejnso3#

你可以像下面这样使用排序和lambda函数。排序键是列表中的最后一项,x[-1]

tensor = [[0.8771, 0.0976, 0.8186],
        [0.7044, 0.4783, 0.0350],
        [0.4239, 0.8341, 0.3693],
        [0.5568, 0.9175, 0.0763],
        [0.0876, 0.1651, 0.2776]]
sorted(tensor,key=lambda x: x[-1])

Result: 

 [[0.7044, 0.4783, 0.035],
 [0.5568, 0.9175, 0.0763],
 [0.0876, 0.1651, 0.2776],
 [0.4239, 0.8341, 0.3693],
 [0.8771, 0.0976, 0.8186]]

相关问题