質問

2つのnumpy配列があります。最初の配列にはいくつかのゼロが含まれており(配列の長さにわたってランダムに分布しています)、これを削除したいと思います。

私の問題は、最初の配列要素がゼロであるインデックス位置にある2番目の配列のエントリも削除したいということです。

非常に扱いにくい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は、x!= 0の場合にTrue、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