Извлечение определенных столбцов в массиве numpy

Это простой вопрос, но, скажем, у меня есть матрица MxN. Все, что я хочу сделать, это извлечь определенные столбцы и сохранить их в другом массиве, но я получаю неверные синтаксические ошибки. Вот код:

extractedData = data[[:,1],[:,9]]. 

Кажется, что приведенной выше строки должно быть достаточно, но я думаю, что нет. Я оглянулся вокруг, но не смог найти ничего мудрого синтаксиса в отношении этого конкретного сценария.

112 голосов | спросил Aladdin 5 MonEurope/Moscow2011-12-05T18:20:47+04:00Europe/Moscow12bEurope/MoscowMon, 05 Dec 2011 18:20:47 +0400 2011, 18:20:47

8 ответов


0

Полагаю, вам нужны столбцы 1 и 9

data[:, [1, 9]]

Или с именами:

data[:, ['Column Name1','Column Name2']]

Вы можете получить имена из data.dtype.names

ответил Fred Foo 5 MonEurope/Moscow2011-12-05T18:24:54+04:00Europe/Moscow12bEurope/MoscowMon, 05 Dec 2011 18:24:54 +0400 2011, 18:24:54
0

Если вы хотите получить столбцы 1 и 9 с этим фрагментом кода, это должно быть:

extractedData = data[:,[1,9]]
ответил Michael J. Barber 5 MonEurope/Moscow2011-12-05T18:26:02+04:00Europe/Moscow12bEurope/MoscowMon, 05 Dec 2011 18:26:02 +0400 2011, 18:26:02
0

если вы хотите извлечь только несколько столбцов:

idx_IN_columns = [1, 9]
extractedData = data[:,idx_IN_columns]

если вы хотите исключить определенные столбцы:

idx_OUT_columns = [1, 9]
idx_IN_columns = [i for i in xrange(np.shape(data)[1]) if i not in idx_OUT_columns]
extractedData = data[:,idx_IN_columns]
ответил queise 1 J0000006Europe/Moscow 2015, 14:14:00
0

Я хотел бы отметить одну вещь: если число столбцов, которое вы хотите извлечь, равно 1, полученная матрица не будет матрицей Mx1 , как вы могли бы ожидать, а вместо этого будет содержать массив элементы столбца, который вы извлекли.

Чтобы преобразовать его в матрицу, в результирующем массиве должен использоваться метод reshape (M, 1) .

ответил Daksh 21 +03002017-10-21T17:53:25+03:00312017bEurope/MoscowSat, 21 Oct 2017 17:53:25 +0300 2017, 17:53:25
0

вы можете использовать extract_data = data.ix [:, ['Column1', 'Column2']]

ответил Rahul 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 04 Sep 2017 12:34:10 +0300 2017, 12:34:10
0

Еще одна вещь, на которую следует обратить внимание при выборе столбцов из массива N-D с помощью такого списка:

data[:,:,[1,9]]

Если вы удаляете измерение (например, выбрав только одну строку), результирующий массив будет (по некоторым причинам) переставлен . Итак:

print data.shape            # gives [10,20,30]
selection = data[1,:,[1,9]]
print selection.shape       # gives [2,20] instead of [20,2]!!
ответил Jan Kukacka 5 FebruaryEurope/MoscowbMon, 05 Feb 2018 19:25:05 +0300000000pmMon, 05 Feb 2018 19:25:05 +030018 2018, 19:25:05
0

Просто:

>>> m = np.matrix(np.random.random((5, 5)))
>>> m
matrix([[0.91074101, 0.65999332, 0.69774588, 0.007355  , 0.33025395],
        [0.11078742, 0.67463754, 0.43158254, 0.95367876, 0.85926405],
        [0.98665185, 0.86431513, 0.12153138, 0.73006437, 0.13404811],
        [0.24602225, 0.66139215, 0.08400288, 0.56769924, 0.47974697],
        [0.25345299, 0.76385882, 0.11002419, 0.2509888 , 0.06312359]])
>>> m[:,[1, 2]]
matrix([[0.65999332, 0.69774588],
        [0.67463754, 0.43158254],
        [0.86431513, 0.12153138],
        [0.66139215, 0.08400288],
        [0.76385882, 0.11002419]])

Столбцы не обязательно должны быть в порядке:

>>> m[:,[2, 1, 3]]
matrix([[0.69774588, 0.65999332, 0.007355  ],
        [0.43158254, 0.67463754, 0.95367876],
        [0.12153138, 0.86431513, 0.73006437],
        [0.08400288, 0.66139215, 0.56769924],
        [0.11002419, 0.76385882, 0.2509888 ]])
ответил yanhh 27 J000000Friday18 2018, 11:53:38
0

вы также можете использовать extractData = data ([:, 1], [:, 9])

ответил Pranav Mahajan 2 PM00000080000001431 2017, 20:18:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132