在Python中移除数组元素并跟踪其位置

1 投票
2 回答
1839 浏览
提问于 2025-04-15 15:23

我有两个numpy数组。第一个数组里面有一些零,这些零在数组的长度上是随机分布的,我想把它们去掉。

我的问题是,我还想在第一个数组的零所在的位置,把第二个数组的对应元素也去掉。

我只想到了一个很麻烦的for循环。有没有人有更“优雅”的方法来做到这一点?

谢谢!

2 个回答

0

你可以使用布尔索引。x!=0 会给你一个布尔数组,x不等于0的地方是True,等于0的地方是False。如果你用这个数组去索引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])
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])

撰写回答