如何用Python(NumPy)从CSV二维整数数组提取列为一维数组?
提取二维数组的列转为一维数组
现有二维数组
T = [[11, 12, 5, 2], [15, 6, 1, 0], [10, 8, 12, 5], [12, 15, 8, 6]],需要编写Python代码将每一列提取为单独的一维数组,比如第一列得到A = [11, 15, 10, 12],最终要提取全部4列。尝试了如下循环代码但存在问题:for r in T; for c in r: A[r]= .... print()
方法1:使用zip()函数(最简便)
zip()可以直接把二维数组的行转成列,配合list()就能得到列表类型的列数组:
T = [[11, 12, 5, 2], [15, 6, 1, 0], [10, 8, 12, 5], [12, 15, 8, 6]] # 转置后直接拆分出4列(返回的是元组,可转成列表) col1, col2, col3, col4 = zip(*T) # 转为列表类型(如果需要的话) col1 = list(col1) col2 = list(col2) col3 = list(col3) col4 = list(col4) print(col1) # 输出: [11, 15, 10, 12] print(col2) # 输出: [12, 6, 8, 15] print(col3) # 输出: [5, 1, 12, 8] print(col4) # 输出: [2, 0, 5, 6]
方法2:列表推导式
如果想手动控制提取逻辑,用列表推导式遍历每一行取对应列的元素:
T = [[11, 12, 5, 2], [15, 6, 1, 0], [10, 8, 12, 5], [12, 15, 8, 6]] # 逐个提取每一列 col1 = [row[0] for row in T] col2 = [row[1] for row in T] col3 = [row[2] for row in T] col4 = [row[3] for row in T]
修复你的循环代码
你原来的循环逻辑搞反了,应该遍历每一行,然后把每行对应列的元素追加到对应列表里:
T = [[11, 12, 5, 2], [15, 6, 1, 0], [10, 8, 12, 5], [12, 15, 8, 6]] # 初始化四个空列表存每一列 A, B, C, D = [], [], [], [] for row in T: A.append(row[0]) B.append(row[1]) C.append(row[2]) D.append(row[3]) print(A) # 输出: [11, 15, 10, 12]
内容的提问来源于stack exchange,提问作者prasadji
相关产品推荐
相关产品推荐

