0

我在“file.csv”等文件中有数据。我想用 np.genfromtxt 阅读它们,并在某些列上做一些统计数据,如平均值、方差等(X, Y, Z)。但是我想对 forX > 1, Y > 3 Z > 2等进行统计。这是一个简单的例子。

此代码产生几乎正确的结果,但它包括所有 Xs、Ys 和 Zs,我想做同样的事情,但使用上面指定的 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

为了仅对某些字段进行平均,您将平均分解如下:

  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 回答
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

要将两个掩码(布尔数组)与按位逻辑与组合,请使用&运算符:

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