如何在Python中展开numpy数组中作为元素的列表?
展开numpy数组中的列表元素
这个问题其实挺常见的,尤其是当你拿到的numpy数组是object类型、混合了标量和列表元素时,我们只需要把每个列表元素拆成单独的列,再和原有的标量列拼接起来就行。下面给你两种实用的解决办法:
方法一:分步处理(清晰易懂)
先模拟你的输入数组,然后一步步展开:
import numpy as np # 模拟你的输入结构 arr = np.array([[0, 301227, 0.863, 0.456, -3.551, 0.532, 135.96200000000002, 4, [0.49, 0.33, 0.33, 0.28, 0.26, 0.47, 0.28, 0.29, 0.41, 0.42, 0.85, 0.48], [53.09, 119.1, 36.67, -1.91, 11.38, -20.86, -0.56, 4.01, -3.51, 0.9, -8.72, 1.04], 66.66666666666667, 1.0]]) # 初始化空列表存储展开后的行 expanded_rows = [] for row in arr: # 拆分每行中的非列表元素和列表元素 non_list_items = [item for item in row if not isinstance(item, list)] list_items = [np.array(item) for item in row if isinstance(item, list)] # 横向拼接非列表元素和展开后的列表元素 expanded_row = np.hstack([non_list_items] + list_items) expanded_rows.append(expanded_row) # 把所有展开后的行纵向拼接成最终数组 expanded_arr = np.vstack(expanded_rows)
方法二:简洁的一行式写法
如果你喜欢更紧凑的代码,可以用列表推导式直接完成:
import numpy as np # 同样模拟输入 arr = np.array([[0, 301227, 0.863, 0.456, -3.551, 0.532, 135.96200000000002, 4, [0.49, 0.33, 0.33, 0.28, 0.26, 0.47, 0.28, 0.29, 0.41, 0.42, 0.85, 0.48], [53.09, 119.1, 36.67, -1.91, 11.38, -20.86, -0.56, 4.01, -3.51, 0.9, -8.72, 1.04], 66.66666666666667, 1.0]]) # 一行完成展开 expanded_arr = np.vstack([np.hstack([x if not isinstance(x, list) else np.array(x) for x in row]) for row in arr])
补充说明
如果已经把数组中的列表提前转换成了numpy数组(而不是Python列表),那代码还能更简单——直接去掉np.array(item)这一步就好,因为numpy数组可以直接被hstack拼接。
这样处理后,你原来的两个列表元素就会各自拆成12个独立的列,最终的数组会包含所有展开后的数值,完全符合你的需求~
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

