Skip to main content
 首页 » 编程设计

python之使用索引值从 numpy 数组中选择项目

2025年05月04日14fff_TT

假设我有一对 numpy 数组 X 和 I 看起来像这样(X 是 2D,I 是 1D)

X               I 
----------------- 
3.4  9.13       0 
3.5  3.43       1 
3.6  2.01       2 
3.7  6.11       0 
3.8  4.95       1 
3.9  7.02       2 
4.0  4.41       3 
4.1  0.23       0 
4.2  0.99       1 
4.3  1.02       0 
4.4  5.61       1 
4.5  7.55       2 
4.6  8.10       0 
4.7  0.33       2 
4.8  0.80       1 

我想做两件事:

  1. Y = indexby(X,I,I0):给定一个值 I0,找到 X 中与 I 中具有匹配值的行。例如,如果 I 是 2,我会想要找到以下数组:

    3.6  2.01   
    3.9  7.02   
    4.5  7.55   
    4.7  0.33   
    
  2. Y = indexby(X,I):返回包含所有可能的键 k 的字典,这样 Y[k] == indexby (X,I,k)。在我的示例数据中,这将产生以下结果:

    Y[0] =  
    3.4  9.13        
    3.7  6.11        
    4.1  0.23        
    4.3  1.02        
    4.6  8.10        
     
    Y[1] =  
    3.5  3.43       
    3.8  4.95       
    4.2  0.99       
    4.4  5.61        
    4.8  0.80   
     
    Y[2] =  
    3.6  2.01   
    3.9  7.02   
    4.5  7.55   
    4.7  0.33   
     
    Y[3] =  
    4.0  4.41 
    

是否有 numpy 函数可以做到这一点?我不确定要寻找什么,所以很难找到它们。

我知道我可以手动执行此操作,但出于性能原因,我想使用内置的 numpy 函数,因为我的应用程序中的数组的行数通常在 100,000 - 1,000,000 范围内。

请您参考如下方法:

有一些高级函数,但让我们看看如何只使用库中最简单的东西来实现它,因为您每天都需要这些简单的函数。

>>> matches = (I == 2) 
>>> matches 
array([False, False,  True, False, False,  True, False, False, False, 
       False, False,  True, False,  True, False], dtype=bool)     
>>> indices = np.nonzero(matches) 
>>> indices 
(array([ 2,  5, 11, 13]),) 
>>> xvals = X[indices] 
>>> xvals 
array([[ 3.6 ,  2.01], 
       [ 3.9 ,  7.02], 
       [ 4.5 ,  7.55], 
       [ 4.7 ,  0.33]]) 

最后一步可能看起来令人困惑。参见 Indexing在教程中了解更多信息。

一旦您了解了 == 运算符和 nonzero 的工作原理工作,查看与 nonzero 相同部分中的其他函数,您应该找到两个更短的方法来完成此操作。