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

Python中如何从二维数组提取交替列生成新数组?

Python中如何从二维数组提取交替列生成新数组?

嗨,我来帮你解决这个问题~你遇到的类型错误,本质原因是你当前用的是普通Python列表,而不是NumPy数组——普通的Python列表并不支持array[:,0::2]这种二维切片语法,这才导致了报错。下面给你两种实用的解决办法:

方法一:纯Python列表推导式(无需额外库)

如果你不想引入第三方库,直接用列表推导式就能实现需求。核心思路是遍历每一行,对每行单独做切片提取交替列:

with open("test_data.txt","r") as test_table:
    array = []
    for line in test_table:
        # 将每行文本转换为整数列表
        row = [int(x) for x in line.split()]
        array.append(row)

# 提取偶数索引的列(从0开始,对应原数据的第1、3、5列)
array1 = [row[0::2] for row in array]
# 提取奇数索引的列(对应原数据的第2、4、6列)
array2 = [row[1::2] for row in array]

print(array1)  # 输出:[[1, 3, 5], [2, 4, 6], [3, 5, 7]]
print(array2)  # 输出:[[2, 4, 6], [3, 5, 7], [4, 6, 8]]

这里的row[start::step]是Python列表的切片语法:0::2表示从索引0开始,每隔2个元素取一个;1::2则是从索引1开始,每隔2个元素取一个,正好匹配你需要的交替列。

方法二:用NumPy数组(适合优化场景)

考虑到你是在做优化问题,NumPy在数值计算和数组操作上的效率会更高,也更适合后续的优化运算。只需要把普通列表转换成NumPy数组,就能用你原本设想的二维切片语法了:

import numpy as np

with open("test_data.txt","r") as test_table:
    array = []
    for line in test_table:
        row = [int(x) for x in line.split()]
        array.append(row)

# 将普通列表转换为NumPy数组
np_array = np.array(array)

# 提取交替列:":"表示取所有行,"0::2"表示取第0、2、4列
array1 = np_array[:, 0::2].tolist()  # 若需要转回普通列表则用tolist()
array2 = np_array[:, 1::2].tolist()

print(array1)
print(array2)

如果后续的优化计算需要用到NumPy的功能,也可以不用调用tolist(),直接保留NumPy数组格式即可。

备注:内容来源于stack exchange,提问作者brawwcs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:38:02