0

「file.csv」などのファイルにデータがあります。np.genfromtxt でそれらを読み取り、いくつかの列で平均、分散などの統計を実行したいと思います(X, Y, Z)。しかし、私は統計を作りたいと思っていますX > 1, Y > 3 Z > 2。これはここでの簡単な例です。

このコードはほぼ正しい結果を生成しますが、すべての X、Y、および Z が含まれています。同じことをしたいのですが、上記で指定した X、Y、Z 条件を使用します。

#file.csv
X,Y,Z
1,2,3
4,2,5
15,9,1
#

data = np.genfromtxt(file.csv, delimiter=',', dtype=float, unpack=True, skiprows = 0) 
X=data[0];Y=data[1];Z=data[2]
Mean = np.average(X)

--> 平均を取得する素晴らしい仕事をしています。ただし、X> 1の場合にのみ平均を取得したい(たとえば)...どうすればそうできますか?

4

2 に答える 2

1

いわゆる「ファンシーインデックス」を使用してX[X>1]、必要な配列の部分を選択できます。

import numpy as np
X,Y,Z = np.genfromtxt('file.csv', delimiter=',', dtype=float, unpack=True, skiprows = 0)
print(X)
# [ nan   1.   4.  15.]
print(X[X>1])
# [  4.  15.]
print(np.average(X[X>1]))
# 9.5

2 つのマスク (ブール配列) をビット単位の論理積で結合するには、次の&演算子を使用します。

print(np.average(X[(X>1)&(X<10)]))
# 4.0
于 2013-01-30T12:52:58.233 に答える
1

一部のフィールドのみを平均化するには、平均化を次のように分類します。

  1. 特定の条件を満たす要素のインデックス (ind) を見つける
  2. ind の値のみでインデックス付けされた配列の平均を求めます

次のコードはまさにこれを行います。

indexes = np.where(X>1)[0] # We index with '0' here to get to the 1st element of the returned tuple
Mean = np.mean(X[indexes])
于 2013-01-30T12:51:25.173 に答える