代码之家  ›  专栏  ›  技术社区  ›  Dzz

删除python中的数组元素,同时跟踪它们的位置

  •  1
  • Dzz  · 技术社区  · 15 年前

    我有两个麻木的阵列。第一个数组包含一些零(它们随机分布在数组的长度上),我想删除这些零。

    我的问题是,我还想删除第一个数组元素为零的索引位置处第二个数组的条目。

    我只想出了一个非常麻烦的for循环。有人有“优雅”的方法来做这个吗?

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  4
  •   sunqiang    15 年前

    这是你想要的吗?我是个麻木的新手。

    In [1]: import numpy as np
    
    In [2]: a = np.array([1,2,0,3,0,4])
    
    In [3]: b = np.array([1,2,3,4,5,6])
    
    In [4]: b[np.where(a)]  
    Out[4]: array([1, 2, 4, 6])
    
    In [5]: np.where(a)  
    Out[5]: (array([0, 1, 3, 5]),)
    
    In [6]: a[np.where(a)]  
    Out[6]: array([1, 2, 3, 4])
    
        2
  •  0
  •   robince    15 年前

    可以使用布尔索引。X!=0给出一个布尔数组,其中x为真!=0假,其中x=0。如果用这个数组索引x或y(即x_nozeros=x[x!=0])则只会得到x处的元素!= 0。如:

    In [1]: import numpy as np
    In [2]: x = np.array([1,2,0,3,0,4])
    In [3]: y = np.arange(1,7)
    In [4]: indx = x!=0
    In [5]: x_nozeros = x[indx]
    In [6]: y_nozeros = y[indx]
    In [7]: x_nozeros
    Out[7]: array([1, 2, 3, 4])
    In [8]: y_nozeros
    Out[8]: array([1, 2, 4, 6])