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

Python中如何从多个numpy数组提取指定元素构建新数组

问题根因

原代码无法得到预期结果的核心问题有3个:

  • 构造的数组A内三个子数组维度不统一:A[0]是shape为(3,3)的二维数组,A[1]、A[2]是shape为(1,3,3)的三维数组,直接索引会出现维度错位
  • 循环索引逻辑错误:循环过程中始终只访问A[0]的元素,完全没有读取A[1]、A[2]的内容,且每次循环都直接覆盖B的值,没有做累积拼接
  • 取值逻辑错误:仅取了每行第一个元素,没有提取全部9个位置的数值做对应位置匹配。
正确实现代码

先将每个子数组统一展平为长度为9的一维数组,再按列堆叠即可得到目标数组:

import numpy as np

A = np.array([
    np.array([[1, 2, 3],
              [4, 5, 6 ],
              [7, 8, 9]]),
    np.array([[[10, 11, 12],
               [13, 14, 15 ],
               [16, 17, 18]]]),
    np.array([[[19, 20, 21],
               [22, 23, 24],
               [25, 26, 27]]])
], dtype=object)

# 每个子数组展平后按列拼接
B = np.column_stack([sub_arr.flatten() for sub_arr in A])
print(B)

运行后输出和预期完全一致:

[[ 1 10 19]
 [ 2 11 20]
 [ 3 12 21]
 [ 4 13 22]
 [ 5 14 23]
 [ 6 15 24]
 [ 7 16 25]
 [ 8 17 26]
 [ 9 18 27]]
额外优化提示

如果可以控制A的初始化逻辑,建议构造A时就保持三个子数组维度一致,去掉A[1]、A[2]外层多余的方括号,后续处理效率会更高:

# 维度统一的A初始化方式
A = np.array([
    [[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]]
])
# 直接转置后reshape就能得到结果,不需要遍历
B = A.T.reshape(-1, 3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:06:51