2009-10-26 42 views
1

我有两个numpy数组。第一个数组包含一些零(它随机分布在数组的长度上),我想删除它。删除Python中的数组元素,同时保持他们的位置跟踪

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

我只想出了一个非常麻烦的for-loop。有没有人有这样做的“优雅”的方法?

Thx!

回答

4

是你想要的吗?我是一个NumPy新手。

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

这是我通常这样做的方式,但有一种更简单的方法。 'np.extract(A,B)'。它和'b [np.where(a)]'一样。 – AFoglia 2009-10-28 16:57:48

+0

@AFoglia,谢谢你介绍np.extract。这个真的很酷。 – sunqiang 2009-10-29 01:28:44

+0

这正是我期待的,谢谢! – Dzz 2009-11-03 08:12:54

0

您可以使用布尔索引。 x!= 0给你一个带True的布尔数组,其中x!= 0 false其中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]) 
相关问题