gpt4 book ai didi

arrays - Numpy argsort 同时区分 0 的值

转载 作者:行者123 更新时间:2023-12-02 02:24:04 28 4
gpt4 key购买 nike

我有一个非常大的数组,但在这里我将展示一个简化的情况:

a = np.array([[3, 0, 5, 0], [8, 7, 6, 10], [5, 4, 0, 10]])
array([[ 3, 0, 5, 0],
[ 8, 7, 6, 10],
[ 5, 4, 0, 10]])

我想要argsort()数组,但有办法区分 0。我尝试将其替换为 NaN:

a = np.array([[3, np.nan, 5, np.nan], [8, 7, 6, 10], [5, 4, np.nan, 10]])
a.argsort()
array([[0, 2, 1, 3],
[2, 1, 0, 3],
[1, 0, 3, 2]])

但是 NaN 仍在排序。有没有办法让 argsort 给它一个值 -1 或其他值。或者除了 NaN 之外还有其他选项来替换 0 吗?我尝试了 math.inf 也没有成功。有人有什么想法吗?

这样做的目的是我有一个余弦相似度矩阵,并且我想排除那些相似度为0的实例。我使用argsort()来获得最高的相似度,这将给我另一个表的索引以及标签的映射。如果一个数组的整体相似度为 0 ([0,0,0]),那么我想忽略它。因此,如果我可以让 argsort() 在排序后将其输出为 [-1,-1,-1],我可以检查整个数组是否为 -1 并将其排除。

编辑:

所以输出应该是:

array([[0, 2, -1, -1],
[2, 1, 0, 3],
[1, 0, 3, -1]])

因此,当使用最后一行来引用 a 时:最小的将是 a[1],即 4,其次是 a[0],即 5,然后是 a[3],即 10,最后-1,即0

最佳答案

您可能想像这样使用numpy.ma.array()

a = np.array([[3,4,5],[8,7,6],[5,4,0]])

使用条件a==0屏蔽此数组,

a_mask = np.ma.array(a, mask=(a==0))
print(a_mask)
# output
masked_array(
data=[[3, 4, 5],
[8, 7, 6],
[5, 4, --]],
mask=[[False, False, False],
[False, False, False],
[False, False, True]],
fill_value=999999)
print(a_mask.mask)
# outputs
array([[False, False, False],
[False, False, False],
[False, False, True]])

并且您可以使用 masked_arraymask 属性来区分要标记的元素并填写其他值。

关于arrays - Numpy argsort 同时区分 0 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65963898/

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