获取一个数组中每行第k大的值,获取数组中每行大于第k大的所有值的索引坐标数组

这篇博客介绍了如何使用numpy库在二维数组中获取每行的第k大数值,并找到所有大于该值的元素索引。通过argpartition函数,可以有效地找出每行中第k大的值,然后利用where函数找到对应位置的索引。示例展示了在6x7的数组中找到每行第5大值及其超过这些值的所有元素的索引。
摘要由CSDN通过智能技术生成
##############获取一个数组中每行第k大的值##################

k = 5
#topk_indices ,k个最大值的index
topk_indices = np.argpartition(x, -k, axis=1)[:, -k:] #返回排序完成数组的索引号;-k负数表示数组x中第k大的元素位于排序完成数组b的倒数第k个位置上;前面的元素都不大于第k大的元素,后面的元素都不小于第k大的元素
rows, _ = np.indices((x.shape[0], k))
#axis = 1维度列中,每行第k大的值
kth_vals = x[rows, topk_indices].min(axis=1).reshape([-1, 1])

例如:
x = np.arange(42).reshape((6,7))
 [[ 0  1  2  3  4  5  6]
 [ 7  8  9 10 11 12 13]
 [14 15 16 17 18 19 20]
 [21 22 23 24 25 26 27]
 [28 29 30 31 32 33 34]
 [35 36 37 38 39 40 41]]

print(kth_vals)

[[ 2]
 [ 9]
 [16]
 [23]
 [30]
 [37]]

##############获取数组中每行大约第k大的所有值的索引坐标数组##############

row, col = np.where(x> kth_vals)

edges = np.concatenate([row.reshape([-1, 1]), col.reshape([-1, 1])], -1)

#(24,2)#每行大于第k大的值有4个,一共有6行,则有6*4个值对应的位置索引对;其中 2是行号列号

print(edges )

[[0 3]
 [0 4]
 [0 5]
 [0 6]
 [1 3]
 [1 4]
 [1 5]
 [1 6]
 [2 3]
 [2 4]
 [2 5]
 [2 6]
 [3 3]
 [3 4]
 [3 5]
 [3 6]
 [4 3]
 [4 4]
 [4 5]
 [4 6]
 [5 3]
 [5 4]
 [5 5]
 [5 6]]


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值