genfromtxt和numpy

0 投票
2 回答
2045 浏览
提问于 2025-04-17 14:11

我有一些数据文件,比如“file.csv”。我想用np.genfromtxt这个工具来读取这些文件,然后对某些列(比如)进行一些统计,比如计算平均值、方差等等。不过,我希望这些统计只针对满足条件的值,比如大于1,大于3,大于2等等。这只是一个简单的例子。

这段代码几乎能得到正确的结果,但它包含了所有的的值。我想做的事情是,按照我上面指定的条件来进行统计。

#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)

--> 这段代码在计算平均值方面做得很好。但是,我希望它只在大于1的情况下计算平均值(比如说)……我该怎么做才能实现这个呢?

2 个回答

1

为了只对某些字段进行平均计算,你可以按照以下步骤来操作:

  1. 找到符合特定条件的元素的索引(也就是位置)
  2. 仅用这些索引来计算数组的平均值

下面的代码正是这样做的:

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])
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

撰写回答