Python genfromtxt和numpy

Python genfromtxt和numpy,python,numpy,genfromtxt,Python,Numpy,Genfromtxt,我在诸如“file.csv”之类的文件中有数据。我想用np.genfromtxt阅读它们,并在一些列上做一些统计,如平均值、方差等(X、Y、Z)。但是,我想对X>1、Y>3z>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=f

我在诸如“file.csv”之类的文件中有数据。我想用np.genfromtxt阅读它们,并在一些列上做一些统计,如平均值、方差等
(X、Y、Z)
。但是,我想对
X>1、Y>3z>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时得到平均值(例如)。。。如何进行此操作?

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

  • 查找满足特定条件的元素的索引(ind) 标准
  • 查找仅使用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])
    
    您可以使用所谓的“花式索引”
    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
    
    要使用位逻辑and组合两个掩码(布尔数组),请使用
    运算符:

    print(np.average(X[(X>1)&(X<10)]))
    # 4.0
    

    print(np.average(X[(X>1)和(X工作正常!但是,我可以添加多个条件,如“print(X[X>1和X<0.5]),当我添加多个条件时,它不工作condition@MoeAbbas:您可以将条件与按位逻辑and运算符结合使用
    &