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

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

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

THX!

有帮助吗?

解决方案

这是你想要的吗?我是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])

其他提示

您可以使用布尔索引。 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])
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top