web-dev-qa-db-ja.com

Pythonで 'None'値でnumpyを使用する方法は?

Pythonの配列の平均を次の形式で計算したい:

Matrice = [1, 2, None]

Noneの値をnumpy.meanの計算で無視したいのですが、その方法がわかりません。

23
user330860

あなたが探している マスクされた配列 。これが例です。

import MA
a = MA.array([1, 2, None], mask = [0, 0, 1])
print "average =", MA.average(a)

残念ながら、マスクされた配列はnumpyで完全にはサポートされていないため、それらを使用して実行できることと実行できないことを確認する必要があります。

11
tom10

そのためにscipyを使用できます:

import scipy.stats.stats as st
m=st.nanmean(vec)
6
Noam Peled

numpyは使用していませんが、標準ではpythonリスト内包表記またはフィルター関数を使用して、Noneをフィルターで除外できます。

>>> [i for i in [1, 2, None] if i != None]
[1, 2]
>>> filter(lambda x: x != None, [1, 2, None])
[1, 2]

次に、結果を平均してNoneを無視します

4
cobbal

NaNやInfなどの値で応急することもできるかもしれません。

In [1]: array([1, 2, None])
Out[1]: array([1, 2, None], dtype=object)

In [2]: array([1, 2, NaN])
Out[2]: array([  1.,   2.,  NaN])

実際には、それは応急修理でさえないかもしれません。 ウィキペディアによると

NaNは、計算で欠落している値を表すために使用できます。

実際には、これはmean()関数では機能しませんが、気にしないでください。 :)

In [20]: mean([1, 2, NaN])
Out[20]: nan
3
endolith

Filterを使用して、Noneを渡すこともできます。これにより、True以外のオブジェクト、0、:Dもフィルタリングされます。したがって、0も必要ない場合に使用してください。

>>> filter(None,[1, 2, None])
[1, 2]
2
YOU

np.mean(Matrice [Matrice!= None])

0
Ishan Tomar

次の例のように、配列をnumpyのfloat64 dtypeに「アップキャスト」してから、numpyのnanmeanメソッドを使用できます。

import numpy as np

arr = [1,2,3, None]
arr2 = np.array(arr, dtype=np.float64)
print(arr2) # [ 1.  2.  3. nan]
print(np.nanmean(arr2)) # 2.0
0
strangeloop