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

Python:提取矩阵中非零唯一行的索引技术问询

解决提取矩阵非零唯一行索引的问题

我来帮你搞定这个需求!你的目标是从给定的矩阵K中,找出非零且唯一的行的原始索引,预期结果是[0, 2]对吧?先聊聊你原有代码里的几个小问题,再给你两种可行的修正方案:

原有代码的问题分析

  • 你当前的代码是把行数据添加到myList,但需求是记录行的索引,方向不对
  • np.any(K[i] != 0, axis=1)会报错:因为K[i]是一维数组,不存在axis=1这个维度,应该去掉axis参数,直接用np.any(K[i] != 0)
  • 两两遍历比较的逻辑会重复处理行,而且没法高效完成去重操作

方案一:直观遍历去重(适合理解逻辑)

这个方法用遍历+集合去重的思路,一步步筛选出目标索引:

import numpy as np

# 定义你的矩阵
K = np.array([[-1., 1., 0.],
              [0., 0., 0.],
              [0., -1., 1.],
              [0., 0., 0.],
              [0., -1., 1.],
              [0., 0., 0.]])

unique_nonzero_indices = []
seen_rows = set()  # 用集合记录已经出现过的非零行

for idx, row in enumerate(K):
    # 跳过全零行
    if not np.any(row != 0):
        continue
    # 将numpy数组转为可哈希的元组(集合只能存可哈希类型)
    row_tuple = tuple(row)
    # 如果这行没出现过,就记录索引
    if row_tuple not in seen_rows:
        seen_rows.add(row_tuple)
        unique_nonzero_indices.append(idx)

print(unique_nonzero_indices)  # 输出: [0, 2]

逻辑说明

  1. 用enumerate遍历矩阵,同时拿到每行的原始索引和行数据
  2. 先过滤掉所有全零行
  3. 把行转成元组(numpy数组不可哈希,没法直接存进集合)
  4. 用集合seen_rows跟踪已经出现过的非零行,首次出现的行就把它的索引加入结果列表

方案二:Numpy原生方法(高效处理大矩阵)

如果你的矩阵很大,用Numpy的内置函数会更高效,代码也更简洁:

import numpy as np

K = np.array([[-1., 1., 0.],
              [0., 0., 0.],
              [0., -1., 1.],
              [0., 0., 0.],
              [0., -1., 1.],
              [0., 0., 0.]])

# 1. 生成非零行的掩码(布尔数组,True表示该行非零)
nonzero_mask = np.any(K != 0, axis=1)
# 2. 提取所有非零行
nonzero_rows = K[nonzero_mask]
# 3. 获取非零行中唯一行的位置索引(在nonzero_rows中的位置)
_, unique_positions = np.unique(nonzero_rows, axis=0, return_index=True)
# 4. 映射回原始矩阵的索引
original_indices = np.where(nonzero_mask)[0][unique_positions]

print(original_indices.tolist())  # 输出: [0, 2]

逻辑说明

  1. np.any(K !=0, axis=1):逐行判断是否有非零元素,得到布尔掩码
  2. np.unique(nonzero_rows, axis=0, return_index=True):找出非零行中的唯一行,同时返回这些行在nonzero_rows中的位置
  3. np.where(nonzero_mask)[0]:得到所有非零行的原始索引数组,再通过unique_positions取对应位置,就是最终的目标索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:25:17