arrays - Numpy argsort 同时区分 0 的值
问题描述
我有一个非常大的数组,但在这里我将展示一个简化的案例:
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
s 仍在排序中。有什么办法可以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]])
并且可以使用 的mask
属性masked_array
来区分要标注的元素并填写其他值。
推荐阅读
- kotlin - Null 安全地检查 kotlin 格式
- kofax - 是否可以使用 KTA SDK 合并图像文件?
- r - Cbind 数据框并使用粘贴输出以创建标签
- javascript - Vue.js:带换行符的字符串插值
- python - 在 Pandas 中组合列并连接非缺失值
- python - 在python中创建一个监听来自套接字连接的消息的程序
- ios - 物理 IOS / Android 设备上的 Firebase Firestore 模拟器
- python - 为什么我在 Python 中的正则表达式不能正常工作?
- docker - 如何在谷歌云构建中将参数传递给 docker run
- python - 使用 django-simple-history 和 DRF 时,如何创建额外的操作来访问对象的历史记录?