You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用argwhere函数按列访问二进制numpy数组的索引

如何获取Numpy二进制数组中按列排列的非零元素索引?

现有如下Numpy二进制数组:

import numpy as np
x=np.array([[1, 1, 0, 0, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 1, 0, 1, 0, 0, 0, 0],
    [0, 0, 1, 1, 0, 0, 1, 0, 0, 0],
    [0, 1, 0, 1, 0, 0, 0, 0, 1, 0],
    [1, 0, 0, 0, 0, 0, 1, 0, 0, 0]])        

使用ind=np.argwhere(x)得到的是按行排列的索引,现在需要获取按列排列的非零元素索引,期望输出如下:

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

解决方案

可以通过对argwhere的结果按列索引排序实现,具体代码如下:

import numpy as np

x = np.array([[1, 1, 0, 0, 1, 0, 0, 0, 0, 0],
              [0, 0, 0, 1, 0, 1, 0, 0, 0, 0],
              [0, 0, 1, 1, 0, 0, 1, 0, 0, 0],
              [0, 1, 0, 1, 0, 0, 0, 0, 1, 0],
              [1, 0, 0, 0, 0, 0, 1, 0, 0, 0]])        

# 获取所有非零元素的索引
ind = np.argwhere(x)
# 按列索引(数组第二列,索引为1)排序
sorted_ind = ind[ind[:, 1].argsort()]

print(sorted_ind)

原理说明

  • np.argwhere(x)会返回所有非零元素的[行索引, 列索引]对,默认按行优先顺序排列。
  • ind[:, 1]提取出所有列索引,argsort()返回这些列索引升序排列对应的位置下标。
  • 用该下标对ind数组切片,即可得到按列索引排序的结果,同一列内的行索引会保留原顺序,与期望输出完全匹配。

内容的提问来源于stack exchange,提问作者raja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:10:24