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

如何用Numpy无显式循环拼接元组列表中的numpy数组

问题描述

现有如下列表:

>>> x
[
(array([1. +0.j , 0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j ]), array([0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j , nan+0.j ])), 
(array([1. +0.j , 0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j ]), array([0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j , nan+0.j ])), 
(array([1. +0.j , 0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j ]), array([0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j , nan+0.j ]))
]

需要将该列表处理为两个一维数组:把每个元组的第一个元素拼接成一个一维数组,第二个元素拼接成另一个一维数组。

预期结果如下:

[
[1. +0.j , 0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j, 1. +0.j , 0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j, 1. +0.j , 0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j],
[0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j , nan+0.j, 0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j , nan+0.j, 0.5+0.5j, 0. +0.j , 0.5-0.5j, 1. +0.j , nan+0.j]
]

要求使用numpy库的标准函数实现,且不能使用显式循环。

解决方案

可以利用numpy的数组转换和拼接函数完成需求,以下是两种实现方式:

方法一:先转二维数组再拼接

  1. 将列表x转换为numpy数组,此时数组形状为(3, 2, 5),对应3个元组、每个元组2个数组、每个数组5个元素;
  2. 分别提取所有元组的第一个元素和第二个元素,用np.concatenate()完成拼接。

代码示例:

import numpy as np

# 假设x为给定的输入列表
np_arr = np.array(x)
first_array = np.concatenate(np_arr[:, 0])
second_array = np.concatenate(np_arr[:, 1])

# 转换为预期的列表格式
final_result = [first_array.tolist(), second_array.tolist()]

方法二:用zip拆分后拼接

利用zip(*x)将列表中的元组按位置拆分,直接得到两个包含所有对应位置元素的迭代器,再分别拼接。

代码示例:

import numpy as np

# 假设x为给定的输入列表
final_result = [np.concatenate(col).tolist() for col in zip(*x)]

两种方式均未使用显式循环,完全依赖numpy标准函数实现,最终输出格式与预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:14:53