Булево индексирование в Numpy с участием двух массивов - PullRequest
0 голосов
/ 10 ноября 2019

Я читал книгу об анализе данных с помощью Python, где есть тема по булевой индексации.

Это код, приведенный в книге:

>>> import numpy as np
>>> names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
>>> data = np.random.randn(7,4)
>>> names
array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'], dtype='<U4')
>>> data
array([[ 0.35214065, -0.6258314 , -1.18156785, -0.75981437],
       [-0.54500574, -0.21700484,  0.34375588, -0.99216205],
       [ 0.29883509, -3.08641931,  0.61289669,  0.58233649],
       [ 0.32047465,  0.05380018, -2.29797299,  0.04553794],
       [ 0.35764077, -0.51405297, -0.21406197, -0.88982479],
       [-0.59219242, -1.87402141, -2.66339726,  1.30208623],
       [ 0.32612407,  0.19612659, -0.63334406,  1.0275622 ]])
>>> names == 'Bob'
array([ True, False, False,  True, False, False, False])

До этого это совершенно ясно. Но я не могу понять, когда они делают данные [names == 'Bob']

>>> data[names == 'Bob']
array([[ 0.35214065, -0.6258314 , -1.18156785, -0.75981437],
       [ 0.32047465,  0.05380018, -2.29797299,  0.04553794]])
>>> data[names == 'Bob', 2:]
array([[-1.18156785, -0.75981437],
       [-2.29797299,  0.04553794]])

Как это происходит?

1 Ответ

1 голос
/ 11 ноября 2019

data[names == 'Bob']

- это то же самое, что и

data[[True, False, False, True, False, False, False]]

И это просто означает получение строки 0 и строки 4 из data.

data[names == 'Bob',2:]

дает те же строки, но теперь ограничивает столбцы началом со столбца 2. До того, как запятая касается строк, после запятой касается столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...