使用select方法选择numpy数组的轴

2 投票
1 回答
1238 浏览
提问于 2025-04-16 22:43

我有以下几个数组。

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

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答