Как выбрать ненулевые столбцы в матрице в Python - PullRequest
0 голосов
/ 10 февраля 2019

Предположим, у меня есть данные в следующем формате:

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

Я хочу выбрать ненулевые столбцы, например, столбец C1, C2, C3, C4, C5, C6 в Python.Любая команда, которая может дать мне нужный формат.

Ответы [ 4 ]

0 голосов
/ 10 февраля 2019

С 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]

Если вам нужны такие имена столбцов (C1, C2, C3, C4, C5, C6),используйте pandas:

columns = ['C0', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8']
s = pd.DataFrame(data=a, columns=columns).any()

s = s[s == 1]

>>> s
C1    True
C2    True
C3    True
C4    True
C5    True
C6    True
dtype: bool
0 голосов
/ 10 февраля 2019

Предположим, что ваша матрица реализована в виде списка списков, где первый индекс - это столбец, второй индекс - строка:

matrix[3][2] == 3

Затем вы можете использовать понимание списка, чтобы получить списоктолько столбцы в matrix, которые не являются всеми нулями

nonzero_columns = [column for column in matrix if any(column)]
# any() will return true here if any element of column is nonzero
0 голосов
/ 10 февраля 2019

Вы можете использовать any вместе с numpy индексированием для выбора столбцов с ненулевыми значениями.

Настройка

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)
0 голосов
/ 10 февраля 2019

Если вы используете библиотеку, такую ​​как 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...