使用select方法选择numpy数组的轴
我有以下几个数组。
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中的每一行是一个键,而数组b中的每一行是一个字典的值。第一行将表示
{'aa': 11, 'bb': 12, 'cc': 13}
现在我们有了这些字典的键。
In [5]: c = np.array(["bb", "aa"])
In [6]: c
Out[6]:
array(['bb', 'aa'],
dtype='|S2')
那么,给定'c',访问b数组的最佳方法是什么,这样可以得到每一行在'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
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])
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。