选择特定元素并使用numpy找到它们的中位数

时间:2017-09-16 19:35:42

标签: python numpy median

我有以下三个数据集。

  1. 2 3
  2. 4 5
  3. 6 6
    1. 5 7
    2. 7 4
    3. 9 9
      1. 1 8
      2. 2 3
      3. 3 2
      4. 基本上,我想创建一个列,其中元素将是第二列的相应元素的中值。每组的第二列的第一个元素是(3,7,8)和中位数= 7,第二列数据集的第二个元素是(5,4,3)和中位数= 4和第三个元素第二列数据集的数据是(6,9,2),中位数= 6。所以我希望我的输出是像[(7,4,6​​)]那样的numpy数组。

        我尝试了以下方法:

        import numpy as np
        filelist=[]
        for i in range (1,4):
            filelist.append("/Users/Hrihaan/Desktop/A_%s.txt" %i)
        for fname in filelist:
            data=np.loadtxt(fname)
            x=data[:,1]
            for j in range (0,3):
                y=np.median(x[j,1]) # tried this method and thought would get the arrays i want (3,7,8) , (5,4,3) and (6,9,2) and their medians
                print(y)
        

        收到以下错误:( IndexError:数组索引太多)

        任何建议都意味着很多。

1 个答案:

答案 0 :(得分:1)

切割第二列并沿适当的轴使用np.median -

np.median([a[:,1],b[:,1],c[:,1]],axis=0)

或者作为数组包装,然后切片并最终使用np.median -

np.median(np.asarray([a,b,c])[...,1], axis=0)

或者使用np.median,这将负责转换到引擎盖下的数组,然后切片 -

np.median([a,b,c],axis=0)[:,1]

因此,如果您将数组作为输入,请使用第一种方法来提高效率,否则后两种方法与数组/列表一样。

示例运行 -

In [10]: a = np.array([[2,3],[4,5],[5,6]])
    ...: b = np.array([[5,7],[7,4],[9,9]])
    ...: c = np.array([[1,8],[2,3],[3,2]])
    ...: 

In [11]: np.median([a[:,1],b[:,1],c[:,1]],axis=0)
Out[11]: array([ 7.,  4.,  6.])

使其与问题中的已发布代码一起使用:

# Grab filenames
filelist=[]
for i in range (1,4):
    filelist.append("/Users/Hrihaan/Desktop/A_%s.txt" %i)

# Grab second columns off each
data_list = []
for fname in filelist:
    data=np.loadtxt(fname)
    data_list.append(data[:,1])

desired_output = np.median(data_list,axis=0)