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

基于位置数组提取Numpy子数组:代码仅生效部分位置的问题排查

问题:按对应位置数组从嵌套numpy数组提取子数组

我来帮你排查代码问题并实现需求。先理清楚你的场景:你有一组嵌套的numpy数组,需要对应每个子数组,用匹配的位置数组提取指定索引的行,但当前代码逻辑出错,只处理了最后一组位置。


1. 你的数据与期望

原始数据

import numpy as np
data=[np.array([[0.9,0.6,0.5,0.4,0.7],[0.8,0.0,0.0,0.8,0.2], [0.9,0.0,0.4,0.4,0.3],[0.9,0.6,0.3,0.2,0.5],[0.8,0.0,0.3,0.1,0.5]]), 
      np.array([[0.9,0.0,0.2,0.4,0.3],[0.0,0.2,0.4,0.0,0.0], [0.0,0.0,0.0,0.2,0.0],[0.5,0.0,0.3,0.6,0.8],[0.5,0.6,0.9,0.0,0.0]])]

位置数组

positions_non_zero=[np.array([2,3,4]),np.array([1,4])]

期望输出

[array([[0.9, 0. , 0.4, 0.4, 0.3], [0.9, 0.6, 0.3, 0.2, 0.5], [0.8, 0. , 0.3, 0.1, 0.5]]), 
 array([[0. , 0.2, 0.4, 0. , 0. ], [0.5, 0.6, 0.9, 0. , 0. ]])]

2. 当前代码的问题

你的代码逻辑存在两个关键错误:

  • 你在遍历data的每个子数组时,调用的data_target函数会遍历整个positions_non_zero数组,最后只返回最后一次循环的结果(也就是positions_non_zero[1]对应的行),没有把data的子数组和对应的位置数组配对。
  • 函数定义放在循环内部是不必要的,而且会导致逻辑混乱。

当前代码:

df_class11=[]
for n in data:
    def data_target(df_class_target):
        for z in df_class_target:
            x_classA=[n[i] for i in z]
            x_classA=np.vstack(x_classA)
        return x_classA
    df_class11.append(data_target(positions_non_zero))
df_class11

3. 修复后的代码

我们只需要把data和positions_non_zero一一配对遍历,利用numpy的整数数组索引直接提取行(比列表推导+vstack更简洁高效):

import numpy as np

data=[np.array([[0.9,0.6,0.5,0.4,0.7],[0.8,0.0,0.0,0.8,0.2], [0.9,0.0,0.4,0.4,0.3],[0.9,0.6,0.3,0.2,0.5],[0.8,0.0,0.3,0.1,0.5]]), 
      np.array([[0.9,0.0,0.2,0.4,0.3],[0.0,0.2,0.4,0.0,0.0], [0.0,0.0,0.0,0.2,0.0],[0.5,0.0,0.3,0.6,0.8],[0.5,0.6,0.9,0.0,0.0]])]
positions_non_zero=[np.array([2,3,4]),np.array([1,4])]

df_class11 = []
# 用zip把data和对应的位置数组配对
for arr, pos in zip(data, positions_non_zero):
    # numpy数组直接用索引数组提取行,不需要vstack
    extracted = arr[pos]
    df_class11.append(extracted)

print(df_class11)

代码解释

  • zip(data, positions_non_zero):将data中的每个子数组和positions_non_zero中对应的位置数组一一绑定,确保每个数组只处理自己对应的位置。
  • arr[pos]:numpy支持直接用整数数组作为索引,直接提取指定索引的行,返回的就是二维numpy数组,无需额外拼接。

运行这段代码就能得到你想要的期望输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:37:52