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

Python调整输出格式:提取numpy数组行中1的位置并转换结构

解决Numpy数组每行1的位置格式转换问题

方法1:改进循环实现

遍历数组每行,提取1的索引并整理成目标格式:

import numpy as np

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

index_list = []
for row in A:
    # 提取每行中1的索引数组(np.where返回元组,取第一个元素)
    idx = np.where(row == 1)[0]
    index_list.append(idx)

# 将索引数组堆叠为二维数组,再包装成列表
result = [np.vstack(index_list)]
print(result)

输出结果:

[array([[1, 2, 3],
       [0, 2, 3],
       [0, 1, 3],
       [0, 1, 2]], dtype=int64)]

方法2:向量化操作(更高效)

利用Numpy的向量化特性直接处理整个数组,避免循环:

import numpy as np

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

# 获取所有值为1的位置的行列索引
rows, cols = np.where(A == 1)
# 按行数reshape为二维数组,再包装成列表
result = [cols.reshape(A.shape[0], -1)]
print(result)

输出结果与方法1完全一致。

原代码问题解析

原代码中np.where(A[i]==1)返回的是包含一维数组的元组(Numpy的where函数统一返回索引元组,即使处理一维输入),直接append到列表后得到的是元组的列表。我们需要提取元组内的索引数组,再将这些数组堆叠成二维数组,最终包装为符合要求的列表格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:45:38