如何在python中选择矩阵中的非零列

时间:2019-02-10 06:47:04

标签: python python-3.x numpy

假设我的数据格式如下:

C0 C1 C2 C3 C4 C5 C6 C7 C8
0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0
0  0  2  3  4  5  6  0  0
0  1  4  5  6  7  8  0  0
0  0  0  0  0  0  0  0  0

我想选择非零列,例如python中的列C1, C2, C3, C4, C5, C6。任何可以直接给我所需格式的命令。

4 个答案:

答案 0 :(得分:4)

您可以结合使用anynumpy索引来选择具有非零值的列。

设置

a = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0],
              [0, 0, 0, 0, 0, 0, 0, 0, 0],
              [0, 0, 2, 3, 4, 5, 6, 0, 0],
              [0, 1, 4, 5, 6, 7, 8, 0, 0],
              [0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int64)

a[:, a.any(0)]

array([[0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 2, 3, 4, 5, 6],
       [1, 4, 5, 6, 7, 8],
       [0, 0, 0, 0, 0, 0]], dtype=int64)

答案 1 :(得分:1)

如果您使用像pandas这样的库,那就更简单了

您只需取每一列的平均值,如果它们大于0,则它们是您必填的列

为此,我将给您一段代码:

import pandas as pd

df = pd.read_csv("File Path")
a = df.mean(axis=0) #gives you column wise mean
for i in len(a):
   if a[i] > 0:
      print(i)  # i will be your column

答案 2 :(得分:1)

使用numpy

import numpy as np 

a = np.array([[0,0,0,0,0,0,0,0,0],
              [0,0,0,0,0,0,0,0,0],
              [0,0,2,3,4,5,6,0,0],
              [0,1,4,5,6,7,8,0,0],
              [0,1,4,5,6,7,8,0,0]])

r = np.nonzero(np.any(a != 0, axis=0))[0]

>>> r
[1 2 3 4 5 6]

如果您需要将它们用作列名(C1C2C3C4C5C6),请使用{ {1}}:

pandas

答案 3 :(得分:0)

假设您的矩阵实现为列表列表,其中第一个索引是列,第二个索引是行:

classdef

然后,您可以使用列表推导获取仅classdef中不全为零的列的列表

matrix[3][2] == 3