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
相关产品推荐
相关产品推荐

