我有兩個numpy數組。第一個數組包含一些零(它隨機分佈在數組的長度上),我想刪除它。刪除Python中的數組元素,同時保持他們的位置跟蹤
我的問題是,我也想刪除第一個數組元素爲零的索引位置的第二個數組的條目。
我只想出了一個非常麻煩的for-loop。有沒有人有這樣做的「優雅」的方法?
Thx!
我有兩個numpy數組。第一個數組包含一些零(它隨機分佈在數組的長度上),我想刪除它。刪除Python中的數組元素,同時保持他們的位置跟蹤
我的問題是,我也想刪除第一個數組元素爲零的索引位置的第二個數組的條目。
我只想出了一個非常麻煩的for-loop。有沒有人有這樣做的「優雅」的方法?
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])
這是我通常這樣做的方式,但有一種更簡單的方法。 'np.extract(A,B)'。它和'b [np.where(a)]'一樣。 – AFoglia 2009-10-28 16:57:48
@AFoglia,謝謝你介紹np.extract。這個真的很酷。 – sunqiang 2009-10-29 01:28:44
這正是我期待的,謝謝! – Dzz 2009-11-03 08:12:54