python - 使用 numpy 数组作为另一个数组的第二个暗淡的索引?

标签 python numpy indexing

<分区>

例如,我有两个numpy数组,

A = np.array(
  [[0,1], 
   [2,3], 
   [4,5]])
B = np.array(
  [[1],
   [0],
   [1]], dtype='int')

并且我想从 A 的每一行中提取一个元素,并且该元素由 B 索引,所以我想要以下结果:

C = np.array(
  [[1],
   [2],
   [5]])

我尝试了 A[:, B.ravel()],但它会广播 B,这不是我想要的。还查看了 np.take,似乎不是我问题的正确解决方案。

但是,我可以通过转置 A 来使用 np.choose

np.choose(B.ravel(), A.T)

但还有其他更好的解决方案吗?

最佳答案

您可以使用 NumPy's purely integer array indexing -

A[np.arange(A.shape[0]),B.ravel()]

sample 运行-

In [57]: A
Out[57]: 
array([[0, 1],
       [2, 3],
       [4, 5]])

In [58]: B
Out[58]: 
array([[1],
       [0],
       [1]])

In [59]: A[np.arange(A.shape[0]),B.ravel()]
Out[59]: array([1, 2, 5])

请注意,如果 B 是一个 1D 数组或此类列索引的列表,您可以使用 .ravel()< 跳过展平操作.

sample 运行-

In [186]: A
Out[186]: 
array([[0, 1],
       [2, 3],
       [4, 5]])

In [187]: B
Out[187]: [1, 0, 1]

In [188]: A[np.arange(A.shape[0]),B]
Out[188]: array([1, 2, 5])

关于python - 使用 numpy 数组作为另一个数组的第二个暗淡的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37897748/

相关文章:

mysql - 尽管检查的行数相似,为什么查询时间会激增?

sql-server - 具有多个 INCLUDE 列的单个索引或每个具有单个 INCLUDE 的多个索引

python - For 循环和系列的真值不明确

python - 如何根据列中的所有或最后几个值检查数据框中的值是否满足条件并替换它?

python - Pandas :在滚动窗口中连接两行

python - 迷宫求解 BFS 算法不起作用,多次检查相同的数字

python - 使用py2exe时出现名称错误

python - 有人试过 Solace 吗? Solace - 多语言支持平台

python - 如何解决 ValueError : The number of classes has to be greater than one; got 1 class

php - 如何使用相同的随机生成索引从两个数组中检索值?