Выбор оси в массиве numpy с помощью метода select - PullRequest
2 голосов
/ 02 августа 2011

У меня есть следующие массивы.

In [1]: a = np.array([["aa", "bb", "cc"], ["cc", "bb", "aa"]])
In [2]: a
Out[2]:
array([['aa', 'bb', 'cc'],
       ['cc', 'bb', 'aa']],
       dtype='|S2')

In [3]: b = np.array([[11, 12, 13], [21, 22, 23]])
In [4]: b
Out[4]:
array([[11, 12, 13],
       [21, 22, 23]])

Соотношение между a и b может быть концептуально описано как b [0] .aa = 11 b [0] .bb = 12. b [0] .cc = 13. т.е. строка в 'a' - это ключи, а строка в «б» являются значениями одного диктанта. Первые строки будут представлять

{'aa': 11, 'bb': 12, 'cc': 13}

Теперь нам даны ключи от этих диктов.

In [5]: c = np.array(["bb", "aa"])
In [6]: c
Out[6]:
array(['bb', 'aa'],
  dtype='|S2')

Теперь, каков наилучший способ доступа к массиву b, заданному 'c', который даст ось каждой строки в качестве значения в 'a'. Один из способов сделать это -

In [7]: cond_list = [a[:, 0] == c,  a[:, 1] == c, a[:, 2] == c]
In [8]: choice_list = [b[:, 0],  b[:, 1], b[:, 2]]
In [9]: np.select(cond_list, choice_list)
Out[9]: array([12, 23])

Есть ли лучший способ сделать это? Что если номер оси в a и b не известен заранее?

1 Ответ

2 голосов
/ 02 августа 2011
In [13]: a==c[:,np.newaxis]
Out[13]: 
array([[False,  True, False],
       [False, False,  True]], dtype=bool)

In [14]: b[a==c[:,np.newaxis]]
Out[14]: array([12, 23])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...