gpt4 book ai didi

python - Numpy 排序数组(稀疏)

转载 作者:行者123 更新时间:2023-12-01 04:51:33 27 4
gpt4 key购买 nike

我正在尝试找出为什么这段代码不对数组进行排序...

任意向量。

x = array([[3, 2, 4, 5, 7, 4, 3, 4, 3, 3, 1, 4, 6, 3, 2, 4, 3, 2]])
xCoo = sps.coo_matrix(x)
perm = np.argsort(x)
xCoo.col = perm[xCoo.col]
print(xCoo.toarray()) # array([3, 2, 4, 5, 7, 4, 3, 4, 3, 3, 1, 4, 6, 3, 2, 4, 3, 2])

我不知道我误解了什么。正确的做法是什么?

谢谢。

附注我知道我可以对数组调用排序;然而,我一遍又一遍地应用同样的排列。

最佳答案

第一个复杂之处是 np.argsort(x) 返回一个二维数组。让我们对展平的 x 进行排序,以获得更简单的 1d perm:

In [1118]: perm=np.argsort(x,None)

In [1119]: perm
Out[1119]:
array([10, 17, 1, 14, 13, 9, 16, 0, 6, 8, 5, 11, 2, 15, 7, 3, 12,
4], dtype=int32)

这对 x 进行了我们期望的排序,对吧?

In [1120]: x[:,perm]
Out[1120]: array([[1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 6, 7]])

现在以相同的方式将其应用于 xCoo,只不过我们必须将其转换为 lil 格式。 coo 格式不可下标:

In [1121]: xCoo.tolil()[:,perm].A
Out[1121]: array([[1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 6, 7]], dtype=int32)

要将perm直接应用于xCoo的属性,我们需要进行另一种排序:

xCoo.col = np.argsort(perm)[xCoo.col]   # <====

这适用于带零的多行 xCoo

您还可以对数据进行排序:

xCoo.data = xCoo.data[perm[xCoo.col]]

这些在这里可以工作,但需要更多测试。

关于python - Numpy 排序数组(稀疏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28337513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com